アプリでZBarSDK ( http://zbar.sourceforge.net/iphone/ ) を使用しています。正常に動作し、非常に高速ですが、問題が見つかりました。コンソールでこの警告が表示され、スキャナーのviewControllerは決して閉じません。既に焦点を合わせたバーコードをスキャンしようとしたときにのみ発生します。つまり、リーダーviewControllerを開くボタンを押してから、バーコードがある場所にカメラをフォーカスすると、正常に機能し、viewControllerが消えてコードが取得されます。しかし、問題は、iPad の焦点をバーコードに合わせてからリーダー ボタンを押した場合です。リーダーviewControllerが表示され、コードを取得しますが、viewControllerは閉じられず、次の警告が表示されます:
警告: プレゼンテーションまたは却下の進行中に、View Controller から却下しようとしています!
これは使用されるコードです:
- (void)escanearCodigo
{
ZBarReaderViewController *escanearVC = [ZBarReaderViewController new];
escanearVC.readerDelegate = self;
escanearVC.supportedOrientationsMask = ZBarOrientationMaskAll;
// Presentar pantalla escaneo
[self presentViewController:escanearVC animated:YES completion:nil];
}
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// Obtener el resultado del escaneo
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
//Almacenar el codigo de barras
break;
NSLog(@"Code: %@", symbol.data);
[reader dismissViewControllerAnimated:YES completion:nil];
}
うまく説明できたと思います:)
前もって感謝します。
更新: これまでのところ、最善の「半分の解決策」は次のとおりです。didFinishPickingMediaWithInfo コードを if 文の中に入れて、viewController がまだ表示されていないときにこのコードが exec になるのを防ぎます (私は思います):
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
if (![reader isBeingPresented]) {
// Obtener el resultado del escaneo
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
//Almacenar el codigo de barras
break;
[reader dismissViewControllerAnimated:YES completion:nil];
}
}