controller warnings barcode dismiss zbar

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:

  1. utilizando dismissModalViewController en lugar de vista modal que está en desuso.
  2. 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 }]; }