1

我正在将 zbar 集成到我的 iphone 应用程序中,下面是用于扫描条形码的代码。

ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.supportedOrientationsMask = ZBarOrientationMaskAll;

ZBarImageScanner *scanner = reader.scanner;
[scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];

[self presentModalViewController: reader
                            animated: YES];

完成后,我将执行以下操作。

- (void) imagePickerController: (UIImagePickerController*) reader
 didFinishPickingMediaWithInfo: (NSDictionary*) info
{
    id<NSFastEnumeration> results =
    [info objectForKey: ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results)

        break;
    // Do what ever u want
    [reader dismissModalViewControllerAnimated: YES];
}

这样做的问题是,我在第一个实例中使用的是 IOS7 及其完美扫描,但是,对于第二个实例,在它扫描后,它不会继续进行,即使取消按钮也不起作用并且屏幕仍处于相机模式。我读到它与 IOS7 的 cpu 和内存有关,但无法弄清楚在我的情况下如何纠正它。请提供您宝贵的意见。

4

1 回答 1

1

好的,首先,请忽略我关于子类化 ZBarReaderView 的评论。不久前我遇到了问题,尽管我记得尝试过,但这不是我解决的解决方案。我有几个建议给你。

presentViewController:animated:尝试将指针设置reader为 nil 之后,在顶部的代码位中。我执行以下操作:

[self presentViewController:reader animated:YES completion:nil];
reader = nil;

您呈现的视图控制器将抓住读者,所以不要担心丢失参考。我认为这实际上有助于记忆。(而且,当你遇到一个问题,事情一开始可以工作,然后在多次执行后失败,这通常是内存问题。)

除此之外,在顶部,我关闭所有符号,然后只启用我感兴趣的符号。例如,我可能会执行以下操作:

// Enable only ISBN-13 & ISBN-10 barcodes
[scanner setSymbology:0 config:ZBAR_CFG_ENABLE to:0];
[scanner setSymbology:ZBAR_EAN13 config:ZBAR_CFG_ENABLE to:1];
[scanner setSymbology:ZBAR_ISBN10 config:ZBAR_CFG_ENABLE to:1];

试试这两个建议,尤其是第一个关于将引用设置为 nil 的建议。这可能会有所帮助。

于 2013-11-27T00:54:52.453 回答