2011-11-28 33 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'陣列保留)?這對我來說似乎是一個潛在的不速之客。 ALASset被命名爲結果 –

+0

。資產對象由我的提供者使用newAsset創建。並且按照慣例,我已經使用以新開始的方法給予保留計數。這個對象在我的數據庫中。對困惑感到抱歉。 –

+0

@MichaelDautermann:調用'-autorelease'而不是'-release'永遠不會錯# – user102008

回答

-1

東西顯然搞亂了我的照片庫。清除我的照片並再次運行應用程序後,我不再遇到此問題。

當然希望我知道實際問題是什麼,以及爲什麼AssetsLibrary試圖枚舉過Bounds。

0

我看到同樣的問題。這是蘋果方面的一個錯誤。

它們在一個單獨的線程中執行枚舉塊並崩潰超出界限。多可惜!我找不到一種方法來解決這個問題。應用程序崩潰,並且沒有什麼可以做,直到他們的圖書館修復自己。

修改相機膠捲或有時啓動iPhoto for iPad可以解決問題,但它會回來。幸運的是,它並不經常發生,但蘋果必須對此做出反應。