我目前使用一些非常標準的代碼來枚舉組中的資產。除了現在我有一個新的錯誤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