2010-01-29 142 views
2

我向App Store提交了我的應用程序更新,這需要更新/遷移核心數據模型。這只是一個簡單的改變,只需添加一個新的屬性,一個改名。對於大多數用戶來說似乎都沒有問題,但是我有2次崩潰報告,我不明白。核心數據導致應用程序在遷移時崩潰

在執行自動推斷遷移時,所有崩潰都會出現。我的遷移選項是NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption

有沒有人有任何想法是什麼花了這麼長的時間遷移?每次應用程序啓動時都會導致崩潰,所以應用程序無法使用這些用戶。他們都運行iPhone OS 3.1.2。

任何幫助將不勝感激。

報告用戶A

com.foo.MyApp failed to launch in time 
elapsed total CPU time (seconds): 19.970 (user 14.130, system 5.840), 92% CPU 
elapsed application CPU time (seconds): 9.910, 45% CPU 

Thread 0: 
0 CoreData      0x00093d08 -[NSPersistentStoreCoordinator dealloc] + 0 
1 CoreFoundation     0x0003963a -[NSObject release] + 28 
2 CoreData      0x000b6e0e -[NSSQLiteInPlaceMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 1470 
3 CoreData      0x000aceb0 -[NSStoreMigrationPolicy(InternalMethods) migrateStoreAtURL:toURL:storeType:options:withManager:error:] + 92 
4 CoreData      0x000ad6f0 -[NSStoreMigrationPolicy migrateStoreAtURL:withManager:metadata:options:error:] + 72 
5 CoreData      0x000ac9ee -[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] + 880 
6 CoreData      0x0000965c -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 1328 

Unknown thread crashed with unknown flavor: 5, state_count: 1 

報告用戶B

com.foo.MyApp failed to suspend in time 
elapsed total CPU time (seconds): 18.580 (user 13.320, system 5.260), 93% CPU 
elapsed application CPU time (seconds): 8.340, 42% CPU 

Thread 0: 
0 libsqlite3.dylib    0x00022f14 sqlite3_backup_init + 2396 
1 libsqlite3.dylib    0x00025474 sqlite3_backup_init + 11964 
2 libsqlite3.dylib    0x000255dc sqlite3_backup_init + 12324 
3 libsqlite3.dylib    0x0002aa74 sqlite3_open16 + 16084 
4 libsqlite3.dylib    0x00047838 sqlite3_prepare16 + 46920 
5 libsqlite3.dylib    0x00002940 sqlite3_step + 44 
6 CoreData      0x00011958 _execute + 44 
7 CoreData      0x000113e0 -[NSSQLiteConnection execute] + 696 
8 CoreData      0x000994be -[NSSQLConnection prepareAndExecuteSQLStatement:] + 26 
9 CoreData      0x000be14c -[_NSSQLiteStoreMigrator performMigration:] + 244 
10 CoreData      0x000b6c60 -[NSSQLiteInPlaceMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 1040 
11 CoreData      0x000aceb0 -[NSStoreMigrationPolicy(InternalMethods) migrateStoreAtURL:toURL:storeType:options:withManager:error:] + 92 
12 CoreData      0x000ad6f0 -[NSStoreMigrationPolicy migrateStoreAtURL:withManager:metadata:options:error:] + 72 
13 CoreData      0x000ac9ee -[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] + 880 
14 CoreData      0x0000965c -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 1328 

Unknown thread crashed with unknown flavor: 5, state_count: 1 

回答

9

第一行是您的線索是怎麼回事。在這兩種情況下,Core Data持久性/保存時間都過長。該應用程序沒有因爲錯誤而崩潰,但它正在被操作系統殺死,因爲它沒有及時關閉或啓動。

每個用戶的數據集有多大?如果它們非常大,那麼您可能需要考慮控制遷移,並將其置於後臺線程或將其分解爲小塊,以便應用程序可以按時啓動。

關機問題表明您可能沒有在應用程序運行時進行增量保存,而是在應用程序關閉時進行一次大的保存。理想情況下,只要工作流中存在邏輯中斷,您的應用程序就應該保存到磁盤。如果您將保存添加到將幫助或解決您的關機終止問題的應用程序中。

+0

謝謝你的回答!確實,核心數據花費的時間太長,無法將數據創建並遷移到新升級的數據庫。這是由於數據庫文件很大。最後,我只是讓應用程序完全初始化,並在下一次運行循環中執行我自己的設置。完美的作品! – 2010-05-22 09:33:47