2011-11-28 4 views
2

현재 그룹의 자산을 열거하기 위해 꽤 표준적인 코드를 사용하고 있습니다. 지금은 새로운 오류가 있습니다.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는 절대 실행되지 않습니다. 다른 사람이 이것을 경험 했습니까?

+0

은 왜'[자산 오토 릴리즈]'대신 (그것이'assetGroup' 배열에 의해 유지되고 이후)'[자산 출시]'호출? 그게 내게 잠재적 인 크래셔 같아. –

+0

ALAsset의 이름은 result입니다. newAsset를 사용하여 공급자가 자산 객체를 만듭니다. 정상적인 관례에 따라 새로운 것으로 시작하는 방법을 사용하여 보유 수를 부여 받았습니다. 이 개체는 내 데이터베이스에 있습니다. 혼란을 드려 죄송합니다. –

+0

@MichaelDautermann :'-release' 대신'-autorelease'를 호출하는 것이 정확하지 않습니다. – user102008

답변

-1

내 사진 라이브러리에 문제가있는 것 같습니다. 내 사진을 지우고 응용 프로그램을 다시 실행하면 더 이상이 문제가 발생하지 않습니다.

실제 문제가 무엇인지, 그리고 AssetsLibrary가 경계를 넘어서 열거 한 이유를 알고 싶습니다.

0

동일한 문제가 발생합니다. 애플 측의 버그 다.

열거 블록을 별도의 스레드에서 실행하고 한계를 벗어나 충돌합니다. 얼마나 수치 스럽습니까! 나는 이것을 잡을 길을 찾을 수 없다. 앱이 충돌하고 라이브러리가 수정 될 때까지 할 수있는 일이 없습니다.

카메라 롤을 수정하거나 iPad 용 iPhoto를 실행하면 문제가 해결되지만 다시 돌아옵니다. 다행스럽게도 너무 자주 발생하지는 않지만 애플은 이에 대응해야합니다.