我正在尝试使用 iOS zxing 小部件进行 QR 码扫描。我有一个 ViewController,它作为我的 UINavigationController 中的项目推送或从另一个 ViewController 模态呈现。这个 ViewController 有一个 SegmentedControl 用于 3 个不同的视图。其中两个视图是加载简单网站的 UIWebView,它们没有什么特别之处。
选择看起来像这样:
- (IBAction)segmentedControlValueChanged:(id)sender {
NSString *urlString;
ZXingWidgetController *widController;
QRCodeReader* qrcodeReader;
NSSet *readers;
switch (segmentedControl.selectedSegmentIndex) {
case 0:
[self.view bringSubviewToFront:self.productSearchWebView];
urlString = [[SACommunicationService sharedCommunicationService] getURLforKey:kURLTypeProductSearch];
[self.productSearchWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];
break;
case 1:
[self.view bringSubviewToFront:self.marketSearchWebView];
urlString = [[SACommunicationService sharedCommunicationService] getURLforKey:kURLTypeMarketSearch];
[self.marketSearchWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];
break;
case 2:
widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];
qrcodeReader = [[QRCodeReader alloc] init];
readers = [[NSSet alloc] initWithObjects:qrcodeReader,nil];
widController.readers = readers;
[self.QRCodeScannerView addSubview:widController.view];
[self.view bringSubviewToFront:self.QRCodeScannerView];
break;
default:
break;
}
}
我尝试调试并一步一步地找出问题出在哪里:
解码器(它是底层 ZXing 逻辑的一部分)尝试从其委托(应该是 ZXingWidgetController 类)调用“failedToDecodeImage:”并崩溃(EXC_BAD_ACCESS)
在逐步完成时,我发现 ZXingWidgetController 的“取消”方法被调用。现在我真的不知道为什么会调用这个方法。Widget 不应在初始化和启动解码器后立即停止。