2012-11-20 23 views
8

我有一個ios應用程序,它並沒有以這種方式在ios 5上崩潰,現在ios 6在4或5 bg/fg週期啓動後一直崩潰。我將問題追溯到ALAssetsLibrary enumerateGroupsWithTypes的調用(每次啓動時,該應用都會同步到基礎照片庫)。對enumerateGroupsWithTypes的調用是在通過調度隊列調用的後臺線程中完成的,因此即使用戶在完成前將應用程序發送給bg,同步代碼也可以完成。我收到崩潰的消息始終是相同的:在__addContextToList_block_invoke_0()有沒有人在後臺線程中使用ALAssetsLibrary時遇到崩潰?

*斷言失敗,/SourceCache/PhotoLibraryServices/MobileSlideShow-1647.5/Sources/PLManagedObjectContext.m:1305

*由於未捕獲異常'NSInternalInconsistencyException'而終止應用程序,原因:'上下文太多。 contextList中沒有空格。'

谷歌搜索這些錯誤消息還沒有產生任何東西。因爲直到應用程序循環開啓/關閉至少5次,纔會發生這種情況,我想這些程序塊在完成時可能沒有從蘋果數據結構中正確刪除?預先感謝任何線索。

更新: 經過更多調查後,這似乎與同步ALAssetsGroupLibrary相關。當我僅同步ALAssetsGroupSavedPhotos或者ALAssetsGroupLibrary中有0張照片時,不會發生崩潰。如果我僅同步ALAssetsGroupLibrary,並且至少有1張照片,則會發生這種情況。

回答

7

事實證明,這一切都與爲每次同步重新分配ALAssetsLibrary有關。 通過添加一個成員變量,崩潰似乎已經消失。

assetsLibrary = [[ALAssetsLibrary alloc] init];

雖然這顯然是我的代碼更高效/更好的設計,但我會說我遇到的問題表明ALAssetsLibrary和線程有一些ARC問題。確保只分配一次!

1

我遭受了同樣的問題:

簡稱:雖然ALAssetsLibrary實例與類型枚舉或ALAssetsGroup instaces列舉的最後一個步驟都列舉資產中,ALAssetsLibrary實例和ALAssetsGroup情況下,不應該所有的枚舉之前被改變塊完成。

0

ALAssetsLibrary枚舉在主線程中運行(請參閱this SO answer)。我懷疑這是因爲資產庫可能希望與用戶進行交互以獲取使用位置數據的權限(因爲照片具有地理標記)。

如果您的代碼假定ALAssetsLibrary將繼續在後臺線程中運行,則這可能是問題的根源。

相關問題