嗨,我正在开发一个 QR 码阅读器应用程序,并且在关闭 ZBarReaderViewController 时遇到了很多麻烦。我有一个带有按钮的 View Controller ,它可以创建阅读器并呈现它。
- (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!
有时它会在没有任何警告的情况下扫描并关闭,但是当我收到该警告时,读者会继续扫描,并且代表会再次被调用,直到不再显示警告为止。
我尝试了其他有同样问题的用户的一些建议,但在我的特定情况下不起作用:
谢谢阅读 :)
最佳答案
有同样的问题, 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
}];
}
关于controller - 无法关闭 imagePickerController didFinishPickingMediaWithInfo 中的 ZBarReaderViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838125/