我一直在我的项目中使用Zbar SDK (1.2)。
这是过去8-9个月内许多用户报告的坠机事件:
Message = *由于未命名的异常“NSGenericException”而终止应用程序,原因是:“*集合在被枚举时发生了变异。”
代码:
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// ADD: get the decode results
id<NSFastEnumeration> results =
[info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
NSLog(@"%@",results);
for(symbol in results)
// EXAMPLE: just grab the first barcode
break;问题的原因是什么?
发布于 2017-09-29 08:52:27
我知道现在有点晚了,但也许这对未来的读者有帮助。
我的理论是,库移除结果对象上的一个或多个集合,而应用程序则通过它们进行枚举。我用一个使ZBarSymbolSet与NSCopying一致的类别解决了这个问题。这允许我复制集合并在副本上进行枚举。类别:
@interface ZBarSymbolSet (AllowCopy) <NSCopying>
@end
@implementation ZBarSymbolSet (AllowCopy)
- (id)copyWithZone:(NSZone *)zone
{
id copy = [[[self class] alloc] initWithSymbolSet:self.zbarSymbolSet];
return copy;
}
@end代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
id result = [info valueForKey:ZBarReaderControllerResults];
if ([result isKindOfClass:[ZBarSymbol class]])
{
ZBarSymbol *symbol = (ZBarSymbol *)result;
// DO SOMETHING WITH SYMBOL
}
else if ([result isKindOfClass:[ZBarSymbolSet class]])
{
ZBarSymbolSet *set = (ZBarSymbolSet *)result;
ZBarSymbolSet *copySet = set.copy;
for (ZBarSymbol *symbol in copySet)
{
// DO SOMETHING WITH SYMBOL
}
}
}https://stackoverflow.com/questions/33207725
复制相似问题