No se puede cerrar ZBarReaderViewController en imagePickerController didFinishPickingMediaWithInfo
warnings barcode (1)
Hola, estoy desarrollando una aplicación de lector de códigos QR y tengo tantos problemas al descartar ZBarReaderViewController. Tengo un controlador de vista con un botón que crea el lector y lo presenta.
- (IBAction)scanAction:(id)sender {
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
[reader.scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
reader.readerView.zoom = 1.0;
// [self presentViewController:reader animated:YES completion:nil];
[self presentModalViewController:reader animated:YES];
}
Luego, en el caso del delegado del lector, estoy haciendo esto (comenté las líneas de procesamiento de resultados, pero igual recibo el mismo error):
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
//
// ZBarSymbol *symbol = nil;
// NSURL *url;
// NSString * textUrl;
//
// for(symbol in results){
// textUrl = symbol.data;
// NSLog(@"%@",textUrl);
// url = [NSURL URLWithString:textUrl];
// break;
// }
//
// if (url != nil) {
//// NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//// [self.webView loadRequest:requestObj];
// [self.urlLabel setText:textUrl];
// }
// [reader dismissViewControllerAnimated:NO completion:nil];
[reader dismissModalViewControllerAnimated:YES];
}
y este es el error que recibo al azar:
QR reader[10159:907] Warning: Attempt to dismiss from view controller <ViewController: 0x1ed4c930> while a presentation or dismiss is in progress!
Algunas veces escanea y descarta sin ninguna advertencia, pero cuando recibo esa advertencia, el lector se queda escaneando y se llama al delegado nuevamente hasta que no se muestren más advertencias.
Intenté algunas sugerencias de otros usuarios que tienen el mismo problema, pero no funcionará en mi caso particular:
- utilizando dismissModalViewController en lugar de vista modal que está en desuso.
- que rodea el procesamiento de resultados en el bloque de finalización del método dismissViewControllerAnimated.
Gracias por leer :)
Tenía el mismo problema y performSeletor: withObject: afterDelay: funciona bien para mí.
- (void)imagePickerController:(UIImagePickerController *)reader didFinishPickingMediaWithInfo:(NSDictionary *)info {
// do some userful stuff
[self performSelector:@selector(dismissZBar) withObject:nil afterDelay:1];
}
- (void)dismissZBar {
[self.presentedViewController dismissViewControllerAnimated:YES completion:^{
// do some stuff after dismiss
}];
}