我目前正在使用一些非常标准的代码来枚举组中的资产。除了现在我有一个新的错误
*** 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
}
}];provider对象是我的自定义数据库提供程序。但是删除这些代码并没有什么好处。最上面的NSLog永远不会被触发,这告诉我枚举代码出现了我无法控制的问题。还有没有人经历过这种情况?
发布于 2011-12-06 06:07:19
我的图片库明显出了点问题。在清理我的照片并再次运行应用程序后,我不再收到这个问题。
当然,我希望我知道真正的问题是什么,以及为什么AssetsLibrary试图枚举超过界限。
发布于 2012-05-18 05:31:46
我也看到了同样的问题。这是苹果方面的一个漏洞。
它们在单独的线程中执行枚举块,并在超出边界时崩溃。太遗憾了!我甚至找不到一种方法来捕捉它。应用程序崩溃,在他们的库自我修复之前,你什么也做不了。
修改相机卷轴或有时启动用于iPad的iPhoto可以修复该问题,但它会重新出现。幸运的是,这种情况并不经常发生,但苹果必须对此做出反应。
发布于 2012-08-21 00:54:24
通过将过滤器设置为照片,然后是视频,并依次枚举每个过滤器,而不是将其保留为默认的“资产”,可以绕过此错误。
我在这里发布了详细信息:ALAssetsLibrary seems to return wrong number of my photos
https://stackoverflow.com/questions/8300940
复制相似问题