2013-03-07 64 views
1

我刚刚设置了我的应用程序的新版本,但在更新到新版本 版本的设备上,应用程序在我applicationDidFinishLaunching:WithOptions后崩溃了。 我更新/添加了一些属性到我的CoreData数据库。AppStore更新后iPhone应用程序崩溃 - CoreData

这是包含崩溃的线程。任何帮助?

Date/Time:  2013-03-07 18:14:47.532 +0100 
    OS Version:  iOS 6.0 (10A405) 
    Report Version: 104 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Crashed Thread: 9 


0 libsystem_kernel.dylib   0x3b501350 __pthread_kill + 8 
1 libsystem_c.dylib    0x3807cfb2 pthread_kill + 54 
2 libsystem_c.dylib    0x380b93ea __abort + 90 
3 libsystem_c.dylib    0x380b9388 abort + 124 
4 distribution     0x001fed18 -[MOManager persistentStoreCoordinator] + 420 
5 distribution     0x0020000e -[NSThread(DataCore) threadContext] + 274 
6 distribution     0x001fd470 +[KwManagedObject defaultContext] + 44 
7 distribution     0x001fd6f6 +[KwManagedObject countWithPredicate:] + 26 
8 distribution     0x001fd6d6 +[KwManagedObject count] + 18 
9 distribution     0x001b3c46 +[DbThread dbCount] (DbThread.m:31) 
10 distribution     0x001b3d1a -[DbThread main] (DbThread.m:43) 
11 Foundation      0x38e69a3c __NSThread__main__ + 968 
12 libsystem_c.dylib    0x3805f0de _pthread_start + 306 
13 libsystem_c.dylib    0x3805efa4 thread_start + 4 
+0

您是否按照[Apple的文档](https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html)中关于模型版本控制和迁移的指导? – MattP 2013-03-07 20:11:43

+0

您是否启用自动轻量级迁移?看到这个主题:http://stackoverflow.com/questions/2310216/implementation-of-automatic-lightweight-migration-for-core-data-iphone – Chris 2013-03-07 20:11:48

+0

@chris:没有我没有更新自动轻量级迁移。但是这是否真的会导致崩溃,我只需要实现轻量级迁移来解决这个问题? thx guys – Fry 2013-03-07 20:26:58

回答

3

当您启动使用CoreData的应用程序时,应用程序将在(默认情况下)Documents目录中创建一个sqlite文件。这个sqlite的内容由您创建的CoreData模型(xcdatamodeld)描述。当你改变你的CoreData模型(xcdatamodeld)时,你必须用你的sqlite文件迁移它。

当更改较小时,可以通过CoreData自动完成(轻量级迁移,检出文档)。但是,当您进行重大更改时,必须确保在用户在更新后启动应用程序时手动迁移数据。这可以通过您编写的迁移方法完成。在使用新模型初始化任何CoreData对象之前,您必须执行此方法。

我建议您查看文档here。在将应用程序提交到AppStore之前,也要经常测试你的应用程序。 确保您还通过在设备上安装先前版本的adhoc ipa来“模拟”更新,启动旧版本,然后安装更新后的ipa并再次启动应用程序。

如果您有任何问题,请随时询问。

+0

谢谢,那么迁移方法应该如何,我应该把它放在哪里? – Fry 2013-03-08 07:14:26

+0

你可以做几件事: 1)删除当前的用户数据并创建一个新的商店(不是因为丢失用户数据而最好的方法) 2)包含旧的CoreData模型。读出每个对象并在它的新存储中创建一个新对象。 3)创建一个[映射模型](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmMappingOverview.html#//apple_ref/doc/uid/TP40004399-CH5 -SW1) – 2013-03-08 07:24:30