我正在创建一个使用 iOS 7 中新的条形码扫描仪的应用程序,但委托方法存在一些问题。扫描仪正确识别条形码并调用委托方法,但它执行得太快,因此调用连续发生多次,导致多次执行 segue。委托方法如下。
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
connection.enabled = NO;
self.conn = connection;
for (AVMetadataObject *metadata in metadataObjects) {
if ([metadata.type isEqualToString:AVMetadataObjectTypeEAN8Code] || [metadata.type isEqualToString:AVMetadataObjectTypeEAN13Code]) {
self.strValue = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];
NSLog(@"%@", [(AVMetadataMachineReadableCodeObject *)metadata corners]);
}
}
[self performSegueWithIdentifier:@"newSegue" sender:self];
}
问题是,如果我没有connection.enabled = NO
在开头行设置,委托会被多次调用,导致视图层次结构损坏(然后崩溃)。另一个问题是,当我在 viewWillAppear 中禁用连接然后重新启用连接self.conn = YES
时,在返回视图时,将从先前的扫描中重复调用委托。然后这会导致视图层次结构中的另一个损坏。
总结一下:委托方法被快速连续调用多次,或者在返回视图时使用(旧)扫描调用委托。任何帮助,将不胜感激。
编辑:我已经部分设法解决了与委托有些坐立不安的问题,但我仍然有多次调用委托方法的问题。如果您在不到五秒的时间内从下一个视图控制器返回,则将再次调用委托方法。