2013-04-29 3 views
0

Я разрабатываю считыватель QR-кода для Iphone и Ipad. Я использую библиотеку ZBar для чтения qr-кодов. Но когда я фокусируюсь на любом qr-коде, приложение ничего не делает. Я использую код, который был указан на сайте zbar в разделе документации. Вот мой код:ZBar библиотека qrcode не работает на IOS

ZBarReaderViewController *barReader = [ZBarReaderViewController new]; 
    barReader.readerDelegate = self; 
    [barReader.scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:0]; 
    barReader.readerView.zoom = 1.0; 
    barReader.showsCameraControls = NO; 
    barReader.showsZBarControls = NO; 
    barReader.wantsFullScreenLayout = NO; 
    barReader.title = @"QRCode Reader"; 
    [self presentModalViewController:barReader animated:YES]; 

И

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 

функция я извлекая QRCode как этот

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
    ZBarSymbolSet *symbols = [info objectForKey:ZBarReaderControllerResults]; 
    ZBarSymbol *symb = nil; 
    NSString *qrCode = nil; 

    for(symb in symbols) 
    { 
     qrCode = [NSString stringWithString:symb.data]; 
    } 

    NSLog(@"The results = %@",qrCode); 

[self dismissModalViewControllerAnimated:YES]; 

ответ

2

этот код написан для меня: .h файл

 ADD delegate protocol 
     <ZBarReaderDelegate> 

.m файл

Для сканирования

- (IBAction) scanButtonClick 
    { 

       ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
       reader.readerDelegate = self; 
       reader.supportedOrientationsMask = ZBarOrientationMaskAll; 
       ZBarImageScanner *scanner = reader.scanner; 
       // TODO: (optional) additional reader configuration here 

       // EXAMPLE: disable rarely used I2/5 to improve performance 
       [scanner setSymbology: ZBAR_I25 
         config: ZBAR_CFG_ENABLE 
          to: 0]; 

       // present and release the controller 
       [self presentModalViewController: reader 
         animated: YES]; 
       [reader release]; 
    } 

выборки/retrive с помощью:

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info 
    { 
     // ADD: get the decode results 
     id<NSFastEnumeration> results = 
     [info objectForKey: ZBarReaderControllerResults]; 
     ZBarSymbol *symbol = nil; 
     for(symbol in results) 
      // EXAMPLE: just grab the first barcode 
      break; 

     // EXAMPLE: do something useful with the barcode data 
     resultText.text = symbol.data; 

     // EXAMPLE: do something useful with the barcode image 
     resultImage.image = 
     [info objectForKey: UIImagePickerControllerOriginalImage]; 

     // ADD: dismiss the controller (NB dismiss from the *reader*!) 
     [reader dismissModalViewControllerAnimated: YES]; 
    } 
4

Почему вы не использовать ZBarReaderViewDelegate?

- (void)readerView:(ZBarReaderView *)view didReadSymbols:(ZBarSymbolSet *)syms fromImage:(UIImage *)img 
{ 
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

    for (ZBarSymbol *sym in syms) 
    { 
     qrCode = [NSString sym.data]; 
    } 

    NSLog(@"The results = %@",qrCode); 
} 
+0

Конечно, ваш делегат (readerDelegate) – user1226119

2

Все символы включены по умолчанию. Ваш код

[barReader.scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:0]; 

является установка конфигурации ZBAR_CFG_ENABLE симвология ZBAR_QRCODE «s к 0 (false). Это означает, что вы фактически отключите сканирование QRCodes.

Документация Zlib на disabling unused symbologies объясняет:

Например, если вы заинтересованы только в QR-коды, отключить других. Надежный способ сделать это - отключить все символы и , а затем повторно использовать только те, которые вы хотите. Это помогает изолировать вас от встречая новые символики, которые могут быть добавлены в будущих версиях библиотеки, пока вы не будете готовы справиться с ними:

// disables all symbologies 
[scanner setSymbology: 0 
     config: ZBAR_CFG_ENABLE 
     to: 0]; 

// enables QRCode 
[scanner setSymbology: ZBAR_QRCODE 
     config: ZBAR_CFG_ENABLE 
     to: 1]; 

Here список поддерживаемых штрихкодов.

Ответ SAMIR RATHOD работает, потому что отключена только символика ZBAR_I25.