【问题标题】:Core Data causing app to crash while migrating核心数据导致应用程序在迁移时崩溃
【发布时间】:2011-01-10 18:38:53
【问题描述】:

我向 App Store 提交了我的应用程序更新,这需要更新/迁移 Core Data 模型。这只是一个简单的更改,添加了一个充满新属性的手,并重命名了一个。对于大多数用户来说似乎一切正常,但是我有 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

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    第一行是您对正在发生的事情的线索。在这两种情况下,核心数据的持久性/保存都花费了太长时间。应用程序不是因为错误而崩溃,而是因为没有及时关闭或启动而被操作系统杀死。

    每个用户的数据集有多大?如果它们非常大,那么您可能需要考虑控制迁移并将其置于后台线程或将其分解为多个部分,以便应用程序可以按时启动。

    关闭问题表明您可能没有在应用程序运行时进行增量保存,而是在应用程序关闭时进行了一次大保存。理想情况下,只要工作流程出现逻辑中断,您的应用程序就应该保存到磁盘。如果您将保存添加到应用程序中,这将有助于或解决您的关机终止问题。

    【讨论】:

    • 感谢您的回答! Core Data 确实花费了太长时间来创建数据并将其迁移到新升级的数据库。这是由于数据库文件很大。最后,我只是让应用程序完全初始化并在下一个运行循环中执行我自己的设置。完美运行!
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2010-12-24
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多