我目前使用一些非常标准的代码来枚举组中的资产。除了现在我有一个新的错误NSRangeException using - [ALAssetsGroup enumerateAssetsUsingBlock:]
*** 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永远不会被解雇,它告诉我枚举代码在我的控制之外有问题。有没有其他人经历过这个?
你为什么叫'[资产自动释放]'而不是'[资产释放]'(因为它是由'assetGroup'阵列保留)?这对我来说似乎是一个潜在的不速之客。 ALASset被命名为结果 –
。资产对象由我的提供者使用newAsset创建。并且按照惯例,我已经使用以新开始的方法给予保留计数。这个对象在我的数据库中。对困惑感到抱歉。 –
@MichaelDautermann:调用'-autorelease'而不是'-release'永远不会错# – user102008