【问题标题】:Unable to dismiss ZBarReaderViewController in imagePickerController didFinishPickingMediaWithInfo无法关闭 imagePickerController didFinishPickingMediaWithInfo 中的 ZBarReaderViewController
【发布时间】:2013-03-28 02:47:25
【问题描述】:

您好,我正在开发一个 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方法的完成块中的结果处理。

感谢阅读:)

【问题讨论】:

    标签: controller warnings barcode dismiss zbar


    【解决方案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
          }];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多