2010-01-29 94 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

相关问题