현재 그룹의 자산을 열거하기 위해 꽤 표준적인 코드를 사용하고 있습니다. 지금은 새로운 오류가 있습니다.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의 이름은 result입니다. newAsset를 사용하여 공급자가 자산 객체를 만듭니다. 정상적인 관례에 따라 새로운 것으로 시작하는 방법을 사용하여 보유 수를 부여 받았습니다. 이 개체는 내 데이터베이스에 있습니다. 혼란을 드려 죄송합니다. –
@MichaelDautermann :'-release' 대신'-autorelease'를 호출하는 것이 정확하지 않습니다. – user102008