QR コードのスキャンに iOS zxing ウィジェットを使用しようとしています。UINavigationController でアイテムとしてプッシュされるか、別の ViewController からモーダルに提示される ViewController があります。この ViewController には、3 つの異なるビューの SegmentedControl があります。これらのビューのうちの 2 つは、単純な Web サイトをロードする 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 の「キャンセルされた」メソッドが呼び出されることがわかりました。このメソッドが呼び出される理由がよくわかりません。ウィジェットは、デコーダーを初期化して開始した直後に停止するべきではありません。