核心数据崩溃
问题描述:
我从两个测试者得到了下面的崩溃日志,不同的设备(3GS和4)和版本(4.1和4.2 GM):核心数据崩溃
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 Crashed:
0 libSystem.B.dylib 0x000792d4 __kill + 8
1 libSystem.B.dylib 0x000792c4 kill + 4
2 libSystem.B.dylib 0x000792b6 raise + 10
3 libSystem.B.dylib 0x0008dd72 abort + 50
4 libstdc++.6.dylib 0x00044a20 __gnu_cxx::__verbose_terminate_handler() + 376
5 libobjc.A.dylib 0x00006594 _objc_terminate + 104
6 libstdc++.6.dylib 0x00042df2 __cxxabiv1::__terminate(void (*)()) + 46
7 libstdc++.6.dylib 0x00042e46 std::terminate() + 10
8 libstdc++.6.dylib 0x00042f16 __cxa_throw + 78
9 libobjc.A.dylib 0x000054c4 objc_exception_throw + 64
10 CoreData 0x000030a6 -[NSPersistentStoreCoordinator initWithManagedObjectModel:] + 254
11 MyApp 0x00002d50 -[FooAppDelegate persistentStoreCoordinator] (FooAppDelegate.m:249)
12 MyApp 0x00002bb4 -[FooAppDelegate managedObjectContext] (FooAppDelegate.m:207)
13 MyApp 0x000021b8 -[FooAppDelegate awakeFromNib] (FooAppDelegate.m:25)
[snip]
这是标准的核心代码数据应用程序模板,所以我没有太大的改变。 我所做的更改是从轻量级迁移转移到传递nil作为选项,并删除以前的数据model.xcdatamodel,model2.xcdatamodel,...,model7.xcdatamodel文件,除了最新的,我从model7.xcdatamodel重命名为model.xcdatamodel。
我的测试手机,iPhone 4和iPhone 3G都没有发生这种崩溃,它们都运行4.2。我让我的测试人员从iPhone上删除应用程序并重新安装,但问题是一样的。 所有在模拟器中运行良好,适用于iOS4到4.2。 任何想法这里发生了什么?
谢谢!
答
我认为这个问题从根本上说是我删除了所有未使用的数据模型,但是由于某种原因,我切换到当前的数据模型并不坚持。
当我分支出来尝试修复破损的版本时,其中一个更改的git diff将当前模型版本从model7.xcdatamodel设置为model.xcdatamodel。我相当肯定我之前做过这件事,因为XCode上的绿色复选标记在剩下的唯一数据模型中显示得很好,但由于某种原因,它并没有粘住。
在我的上一个测试版本(0.19)和提交的版本(1.0.0)之间有两个修订。我仔细检查了这两个修订版中的更改,其中一个将当前数据模型设置为正确的数据模型。这就是为什么我的测试与提交的版本工作(数据模型设置正确),但测试者的版本没有(因为它没有正确设置)。
很高兴我终于明白了。士气:让双倍额外确保你的数据模型的变化都在那里。
不能告诉刚刚从崩溃日志中发生了什么,因为它正在变得如此艰难,它没有留下任何有用的消息。我认为问题在于你的迁移,尽管我会假设只使用最新版本进行删除和重新安装可以解决这个问题。该应用是否带有任何数据?如果是这样,那可能是问题。 – TechZen 2010-11-17 23:20:23
不知道。我认为这是造成这种情况的综合因素。将提出一个答案,试图解释它。 – Christoph 2010-11-18 16:31:55