在ios中使用ZBarReaderViewController导致条形码不一致

在ios中使用ZBarReaderViewController导致条形码不一致,ios,xcode,zbar-sdk,Ios,Xcode,Zbar Sdk,我正在做一个iOS应用程序,其中我必须扫描条形码。我使用ZBarReaderViewController扫描条形码。有时它给出的结果是准确的,但有时它给出的是未知值,如图所示 -(IBAction)scanBarCode:(id)sender { reader = [ZBarReaderViewController new]; reader.readerDelegate = self; reader.supportedOrientationsMask = ZBarOrien

我正在做一个iOS应用程序,其中我必须扫描条形码。我使用ZBarReaderViewController扫描条形码。有时它给出的结果是准确的,但有时它给出的是未知值,如图所示

 -(IBAction)scanBarCode:(id)sender
{
reader = [ZBarReaderViewController new];
     reader.readerDelegate = self;
     reader.supportedOrientationsMask = ZBarOrientationMaskAll;
    reader.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;  

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height * [UIScreen mainScreen].scale >= 1136)
    [reader.readerView setScanCrop:(CGRect){ { 0.25, 0.08 }, { 0.07, 0.84} }];//.25
else
    [reader.readerView setScanCrop:(CGRect){ { 0.23, 0.08 }, { 0.09, 0.84} }];

 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];*/

//swetha test
[scanner setSymbology: 0
               config: ZBAR_CFG_ENABLE
                   to: 0];
// Enable EAN 13
[scanner setSymbology: ZBAR_EAN13
               config: ZBAR_CFG_ENABLE
                   to: 1];
// Enable UPC-A
[scanner setSymbology: ZBAR_UPCA
               config: ZBAR_CFG_ENABLE
                   to: 1];
// Enable Code 128
[scanner setSymbology: ZBAR_CODE128
               config: ZBAR_CFG_ENABLE
                   to: 1];
 [self presentViewController:reader animated:YES completion:nil];
 [reader release];
}

-(void)imagePickerController:(UIImagePickerController*)选取器未使用信息完成PickingMediaWithInfo:(NSDictionary*)信息
{
id结果=
[信息对象forkey:ZBarReaderControllerResults];
ZBarSymbol*符号=nil;
用于(结果中的符号)
//示例:只需抓取第一个条形码
打破
//示例:对条形码数据执行一些有用的操作
serialnumber.text=symbol.data;
//示例:对条形码图像执行一些有用的操作
//结果图像=
//[info objectForKey:UIImagePickerControllerOriginalImage];
//添加:关闭控制器(注意从*读卡器*!)
barcodeClicked=0;
[picker DismissionViewControllerInitiated:是完成:无];
}

如果我不清楚,请告诉我。提前感谢。

我的ImagePickerControl功能如下:

- (void) imagePickerController: (UIImagePickerController*)reader didFinishPickingMediaWithInfo: (NSDictionary*) info {
  @try {
    id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
    for(id obj in results) {
      ZBarSymbol *symbol = obj;
      serialnumber.text = [symbol data];
    }
  }
  @catch (NSException *ex) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"%@",ex]
                                                delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
  }
  barcodeClicked = 0;
  [reader dismissViewControllerAnimated:YES completion:nil];  
}
-(void)imagePickerController:(UIImagePickerController*)读卡器已使用信息完成PickingMediaWithInfo:(NSDictionary*)信息{
@试一试{
id结果=[info objectForKey:ZBarReaderControllerResults];
对于(结果中的id obj){
ZBarSymbol*symbol=obj;
serialnumber.text=[符号数据];
}
}
@捕获(NSException*ex){
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@“错误”消息:[NSString stringWithFormat:@“%@”,ex]
代表:自我取消按钮:@“确定”其他按钮:无];
[警报显示];
}
barcodeClicked=0;
[reader DismissViewControllerInitiated:YES completion:nil];
}
我强烈建议使用try-catch并查看所有结果,因为如果附近有两个不同的条形码,它可能会解释它们,并将对象解析为ZBarSymbol

- (void) imagePickerController: (UIImagePickerController*)reader didFinishPickingMediaWithInfo: (NSDictionary*) info {
  @try {
    id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
    for(id obj in results) {
      ZBarSymbol *symbol = obj;
      serialnumber.text = [symbol data];
    }
  }
  @catch (NSException *ex) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"%@",ex]
                                                delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
  }
  barcodeClicked = 0;
  [reader dismissViewControllerAnimated:YES completion:nil];  
}