我的代碼使用核心數據執行大量任務,然後當我去保存時,它崩潰而沒有任何錯誤。我的保存代碼很簡單:應用程序退出[managedObjectContext save:]無錯誤
[[self managedObjectContext] save:&error];
NSLog(@"Error: %@", error);
它沒有到達錯誤行,它崩潰並退出到主屏幕的那一點。
我在診斷程序中選擇了「Guard Malloc」以外的其他所有內容。
這是日誌我得到,當它運行保存命令:
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
CoreData: sql: COMMIT
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: INSERT INTO ZENTRY(Z_PK, Z_ENT, Z_OPT, ZLOCATION, ZBOOKMARKED, ZCREATIONDATE, ZENTRYID, ZMESSAGE, ZSECTIONIDENTIFIER, ZTICDSSYNCID, ZVERSION) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
CoreData: sql: COMMIT
CoreData: sql: pragma page_count
CoreData: annotation: sql execution time: 0.0047s
CoreData: sql: pragma freelist_count
CoreData: annotation: sql execution time: 0.0069s
沒有任何錯誤的提及此之前。我怎樣才能知道什麼是崩潰我的應用程序?
編輯:我現在知道這發生在[NSEntityDescription insertNewObjectForEntityForName:@"Entry" inManagedObjectContext:[self managedObjectContext]];
調用後,並且它是由TICoreDataSync在此之前在我的核心數據存儲上執行的方法引起的。我無法更改該代碼,或將其從我的核心數據存儲中移除。我認爲與多線程訪問存儲有關的問題,所以現在我需要知道如何在主線程上處理這個問題?
我把它移動了一下,發現只有在調用'[NSEntityDescription insertNewObjectForEntityForName:@「Entry」 inManagedObjectContext:[self managedObjectContext]];''後纔會發生。這仍然是主要的上下文,所以我認爲它必須是運行在後臺上下文中的其他代碼。我有TICoreDataSync與Dropbox設置,並且在代碼發生之前在覈心數據存儲上運行,這就是導致問題的原因,但我無法更改它們的代碼。我如何使它與後臺線程兼容? – Andrew
這是一個開源庫 - 您可以訪問他們的代碼。找出如何共享相同的調度隊列。我沒有經驗,但至少現在你知道問題了。在他們的github網站上發佈求助請求,或者谷歌那個庫以及'如何共享一個調度隊列' - 類似的東西。 –