首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ZBarSymbolSet上崩溃

在ZBarSymbolSet上崩溃
EN

Stack Overflow用户
提问于 2015-10-19 06:14:57
回答 1查看 174关注 0票数 2

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

这是过去8-9个月内许多用户报告的坠机事件:

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

代码:

代码语言:javascript
复制
- (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;

问题的原因是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-29 08:52:27

我知道现在有点晚了,但也许这对未来的读者有帮助。

我的理论是,库移除结果对象上的一个或多个集合,而应用程序则通过它们进行枚举。我用一个使ZBarSymbolSet与NSCopying一致的类别解决了这个问题。这允许我复制集合并在副本上进行枚举。类别:

代码语言:javascript
复制
@interface ZBarSymbolSet (AllowCopy) <NSCopying>

@end

@implementation ZBarSymbolSet (AllowCopy)

- (id)copyWithZone:(NSZone *)zone
{
    id copy = [[[self class] alloc] initWithSymbolSet:self.zbarSymbolSet];
    return copy;
}

@end

代码:

代码语言:javascript
复制
- (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
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33207725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档