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

*** 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

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

当然希望我知道实际问题是什么,以及为什么资产库里雷亚尔试图枚举界限。

其他提示

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

我在这里发布详细信息: AlassetSlebibrary似乎返回了我的照片的错误数量

我看到同样的问题。这是苹果方面的错误。

他们在单独的线程中执行枚举块,并从范围中崩溃。多可惜!我甚至找不到抓住这一点的方法。应用程序崩溃了,直到他们的库修复自己,您无能为力。

修改相机卷或有时为iPad启动iPhoto解决了问题,但它会返回。幸运的是,这并不经常发生,但是苹果必须对此做出反应。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top