4

嗨,我正在开发一个 QR 码阅读器应用程序,并且在关闭 ZBarReaderViewController 时遇到了很多麻烦。我有一个带有按钮的视图控制器,它可以创建阅读器并呈现它。

- (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];
}

然后在读者代表上我正在这样做(我评论了结果处理行,但我仍然得到同样的错误):

- (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];
}

这是我随机得到的错误:

QR reader[10159:907] Warning: Attempt to dismiss from view controller <ViewController: 0x1ed4c930> while a presentation or dismiss is in progress!

有时它会在没有任何警告的情况下扫描并关闭,但是当我收到该警告时,读者会继续扫描,并且代表会再次被调用,直到不再显示警告为止。

我尝试了其他有同样问题的用户的一些建议,但在我的特定情况下不起作用:

  1. 使用dismissModalViewController 而不是已弃用的模态视图。
  2. 围绕dismissViewControllerAnimated方法的完成块中的结果处理。

谢谢阅读 :)

4

1 回答 1

1

有同样的问题, performSeletor:withObject:afterDelay: 对我来说很好。

- (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
      }];
}
于 2013-11-30T22:47:01.663 回答