我向App Store提交了我的应用程序更新,要求更新/迁移Core Data模型。这只是一个简单的更改,其中添加了一个充满新属性的手,并重命名了一个。它似乎对大多数用户来说都很好,但我有2个崩溃报告,我不明白。
执行自动推断迁移时,似乎都会发生崩溃。我的迁移选项为NSMigratePersistentStoresAutomaticallyOption
和NSInferMappingModelAutomaticallyOption
。
有没有人有任何想法,迁移这么长时间?每次应用程序启动时都会导致崩溃,因此应用程序我们无法使用这些用户。他们都在运行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
答案 0 :(得分:9)
第一行是关于发生了什么的线索。在这两种情况下,核心数据持久性/保存花费的时间太长。该应用程序没有因为错误而崩溃,但它被操作系统杀死,因为它没有及时关闭或启动。
每个用户的数据集有多大?如果它们非常大,那么您可能需要考虑控制迁移并将其放在后台线程中或将其分解为多个部分,以便应用程序可以按时启动。
关闭问题表明您可能在应用程序运行时没有执行增量保存,而是在应用程序关闭时执行一次大型保存。理想情况下,只要工作流中存在逻辑中断,您的应用程序就应该保存到磁盘。如果您在应用程序中添加了有助于解决关机终止问题的保存。