我有一個iPhone應用程序在保存CoreData時有時會凍結,然後不會重新啓動。我確實有第二個線程使用數據庫,但我認爲我已經按照該模式爲該線程創建了單獨的上下文。這是重新啓動的崩潰報告。有任何想法嗎?在CoreData上凍結應用程序保存
我試過改變它只能運行一個線程,這裏是進入背景後的最新冰點。
#0 0x30851b98 in fsync
#1 0x3094e694 in _sqlite3_purgeEligiblePagerCacheMemory
#2 0x3094e6b8 in _sqlite3_purgeEligiblePagerCacheMemory
#3 0x30945372 in sqlite3_compileoption_get
#4 0x30957f06 in sqlite3_extended_errcode
#5 0x3095dc20 in sqlite3_extended_errcode
#6 0x3095dd8e in sqlite3_extended_errcode
#7 0x309646f8 in sqlite3_clear_bindings
#8 0x3098845a in sqlite3_open16
#9 0x3094495a in sqlite3_step
#10 0x31a1dc20 in _execute
#11 0x31acc6e8 in -[NSSQLiteConnection commitTransaction]
#12 0x31aca646 in -[NSSQLiteConnection endPrimaryKeyGeneration]
#13 0x31abeab4 in -[NSSQLCore prepareForSave:]
#14 0x31a4acd0 in -[NSSQLCore saveChanges:]
#15 0x31a1591e in -[NSSQLCore executeRequest:withContext:error:]
#16 0x31a1538a in -[NSPersistentStoreCoordinator executeRequest:withContext:error:]
#17 0x31a48544 in -[NSManagedObjectContext save:]
#18 0x000080aa in -[KPersistence saveManagedObjects:] at KPersistence.m:242
#19 0x00004320 in -[KinKastAppDelegate applicationDidEnterBackground:] at KinKastAppDelegate.m:126
這是我實現saveManagedObjects的
-(BOOL)saveManagedObjects:(NSError **)error
{
[persistentStoreCoordinator lock];
BOOL success = YES;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:error]) {
VLog(@"Unresolved error %@, %@", *error, [*error userInfo]);
success = NO;
}
}
[persistentStoreCoordinator unlock];
return success;
}
+1同樣的問題,沒有解決方案。 – 2012-02-01 18:24:39
我已經爲我解決了它。問題是將浮點數或雙精度值保存到整數字段。這導致了內存中的浮點nsnumber和始終從磁盤上的db讀取的整數nsnumber之間的無限合併循環。 – 2012-02-01 19:41:17
嗯..感謝提示。我將不得不再次檢查我的代碼,看起來需要一段時間:S – 2012-02-01 20:18:53