NSRangeException使用 - [ALAssetsGroup enumerateAssetsUsingBlock:]

时间:2011-11-28 19:08:19

标签: ios alassetslibrary nsrangeexception

我目前正在使用一些非常标准的代码来枚举组中的资产。除了现在我有一个新的错误

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSOrderedSet enumerateObjectsAtIndexes:options:usingBlock:]: index 46 beyond bounds [0 .. 45]'

以下是我正在使用的代码。

 [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            NSLog(@"Asset %@", result);
            if (result != nil)
            {
                Asset *asset = [provider newAsset];
                asset.date = [result valueForProperty:ALAssetPropertyDate];
                id duration = [result valueForProperty:ALAssetPropertyDuration];
                asset.duration =  [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%@", duration]];
                CLLocation *location = [result valueForProperty:ALAssetPropertyLocation];
                asset.location = [location description];
                asset.orientation = [result valueForProperty:ALAssetPropertyOrientation];
                asset.type = [result valueForProperty:ALAssetPropertyType];
                NSDictionary *urls = [result valueForProperty:ALAssetPropertyURLs];
                for (NSString * key in urls) {
                    NSLog(@"Url = %@",[urls objectForKey:key]);
                    asset.url = [NSString stringWithFormat:@"%@", [urls objectForKey:key]];
                }

                [assetGroup addAssetsObject:asset];

                [asset release]; // Corrected based on comments

            }
        }];

提供者对象是我的自定义数据库提供者。但是消除这些代码并不好。 顶级的NSLog永远不会被解雇,它告诉我枚举代码在我无法控制之外出现问题。还有其他人经历过这个吗?

3 个答案:

答案 0 :(得分:0)

我看到了同样的问题。这是苹果公司的一个漏洞。

他们在一个单独的线程中执行枚举块并且崩溃超出范围。多可惜!我找不到一种方法来捕捉这个。应用程序崩溃,在他们的库修复自己之前,你无能为力。

修改相机胶卷或有时启动iPhoto for iPad可以解决问题,但它会回来。幸运的是,它不会经常发生,但Apple必须对此作出反应。

答案 1 :(得分:0)

可以通过将过滤器设置为照片,然后依次设置视频并枚举每个过滤器来避免此错误,而不是将其保留在默认的“资产”中。

我在此处发布了详细信息:ALAssetsLibrary seems to return wrong number of my photos

答案 2 :(得分:-1)

我的照片库显然搞砸了。清理完照片并再次运行应用程序后,我不再遇到此问题。

当然希望我知道实际问题是什么以及为什么AssetsLibrary尝试枚举超过Bounds。