2011-09-28 157 views
0

我試圖使用ALAssetLibrary獲取相冊和照片。這是我的代碼:如何從相機膠捲獲取照片?

 
void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
     if(result != NULL) { 
      NSLog(@"See Asset: %@", result); 
     } 
    }; 

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) { 
     if(group != nil) { 
      [group enumerateAssetsUsingBlock:assetEnumerator]; 
     } 
    }; 

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library enumerateGroupsWithTypes:ALAssetsGroupAll 
          usingBlock:assetGroupEnumerator 
         failureBlock: ^(NSError *error) { 
          NSLog(@"Failure"); 
         }]; 

我在得到EXC_BAD_ACCESS:[組enumarateAssetsUsingBlock:assetEnumerator]和組不爲零。

奇怪的是,如果我創建一個新項目,但這個代碼正在工作,但在我的舊項目中它不起作用。

SDK版本的iOS 4.3

測試在iPhoneSimulator 4.3

誰能能給我發生了什麼事的IDEEA?

謝謝。

回答

2

當你在一個項目上崩潰而不在另一個上時,你確定這些設置和配置是否合適?

特別是:

  • 檢查TARGET_DEPLOYMENT_OS設置爲最低版本ALAsset框架可用。
  • 檢查是否已包括了所有要求的框架(即使鏈接應該警告,如果你忘了,包括它)

此外,崩潰(系統崩潰日誌,異常細節的細節,... )會有幫助,如果有的話。

您是否確定ALAssetLibrary在枚舉(可能是異步完成)之前未發佈?你的代碼中沒有release在你的問題中,但也許有一個在你的真實代碼?

據我所知,enumerateGroupsWithTypes:執行上的asynchrnous方式(見this other question on SO)輔助線程的塊,所以這可能是你的問題(你正在嘗試使用已經從內存中釋放一組,因爲你開始你的枚舉,你有確保ALAssetLibrary在枚舉完成之前仍在內存中)

相關問題