Ios 撞在ZBarSymbolSet上

Ios 撞在ZBarSymbolSet上,ios,zbar,zbar-sdk,Ios,Zbar,Zbar Sdk,我一直在我的项目中使用Zbar SDK(1.2) 这是过去8-9个月许多用户报告的崩溃: Message=*由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“*集合在枚举时发生了变异。” 代码: -(无效)imagePickerController:(UIImagePickerController*)读卡器 didFinishPickingMediaWithInfo:(NSDictionary*)信息 { //添加:获取解码结果 id结果= [信息对象forkey

我一直在我的项目中使用Zbar SDK(1.2)

这是过去8-9个月许多用户报告的崩溃:

Message=*由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“*集合在枚举时发生了变异。”

代码:

-(无效)imagePickerController:(UIImagePickerController*)读卡器
didFinishPickingMediaWithInfo:(NSDictionary*)信息
{
//添加:获取解码结果
id结果=
[信息对象forkey:ZBarReaderControllerResults];
ZBarSymbol*符号=nil;
NSLog(@“%@”,结果);
用于(结果中的符号)
//示例:只需抓取第一个条形码
打破

问题的原因是什么?

我知道现在有点晚了,但这可能对未来的读者有所帮助

我的理论是,当应用程序对结果对象进行枚举时,库会删除结果对象上的一个或多个集合。 我用一个使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

我已经为这次崩溃挣扎了很长一段时间了!感谢您发布解决方案!
@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
        }
    }
}