2011-10-25 49 views
0

我正在使用CATiledLayer呈現NSManagedObjects。 但是你知道,CATiledLayer在後臺線程中渲染對象。這使得我的應用程序崩潰在iOS5上由於在iOS5上使用CATiledLayer和核心數據導致的崩潰錯誤

我知道我應該爲每個線程使用分離的NSManagedContext,但這種方式會使性能變差。 (因爲我必須更頻繁地保存NSManagedContext以將數據傳輸到其他線程)。

你們是否知道解決我的問題的更好方法?請幫忙!!!

對不起,我英文很差!

回答

1

NSManagedObjectContext不是線程安全的,NSMangedObjects也不是。你應該在後臺線程上創建一個MOC,傳入任何IDs(這是線程安全的),並將它們加載到後臺線程上下文中。

UPDATE:

一個替代方案是創建普通的舊的obj-C的對象,或者甚至只是一個普通的NSDictionay,其中包含必要的數據和這些信息傳遞給後臺線程。因此,在您的MO填充後,創建一個POOCO,複製必要的數據,並將其傳遞到後臺線程進行處理。這將避免磁盤訪問。

+0

謝謝你回答我。但是你知道,你必須在主線程上保存nsmanagedcontext,然後才能在新線程中通過objectID獲取對象。這使得我的應用程序的性能變得糟糕透頂。我想知道這個問題有沒有更好的解決方案? –

+0

查看我的更新.. – logancautrell

+1

我同意@ logancautrell的第二個建議,使用KVC創建一個來自「NSManagedObject」的值的字典並將該字典賦予您的'CATiledLayer'。然後讓「CATiledLayer」更新該數據。 –

相關問題