【发布时间】:2011-03-04 18:12:57
【问题描述】:
我有点卡在这个核心数据错误上。我在应用程序上的基本设置是在初始化时加载一些基本数据。让我们称他们为部门和员工。在初始化时,我只会加载与应用当前用户相关的部门和员工。
然后用户可以搜索其他部门和/或员工。例如,当他们搜索艺术部门时,服务器会返回该部门的前 20 名员工。该代码将新部门存储到核心数据中,并将员工存储到核心数据中。我正在使用 2 个线程,一个用于将数据存储到上下文中的实际工作,另一个用于在 GUI 上显示数据。我使用 mergeChangesFromContextDidSaveNotification 方法来合并更改。
部门的存储总是有效的,但是行:
BOOL ok = [importContext save:&errorSave];
总是会导致 _unwind_resume 错误。我接受了here 的建议。在 Objective C 异常上打开停止。我看到了这个调用堆栈。
#0 0x030203f4 in objc_exception_throw ()
#1 0x0253d921 in -[NSSQLiteConnection updateRow:] ()
#2 0x0253c6b4 in -[NSSQLConnection performAdapterOperations:] ()
#3 0x0253c35e in -[NSSQLCore _performChangesWithAdapterOps:] ()
#4 0x0253ae3a in -[NSSQLCore performChanges] ()
#5 0x02534778 in -[NSSQLCore saveChanges:] ()
#6 0x024f27c9 in -[NSSQLCore executeRequest:withContext:error:] ()
#7 0x025a134b in -[NSPersistentStoreCoordinator executeRequest:withContext:error:] ()
#8 0x0252b088 in -[NSManagedObjectContext save:] ()
这并没有给我任何关于保存导致此异常的原因的线索。
我通过在保存前打印出来查看了我试图保存的数据,它看起来没问题。通常有 1 或 2 名员工已经导入,并更新(根据需要),并插入其他员工。导入上下文似乎正确地看到了这一点。
我还检查以确保数据模型没有无效的非可选属性。
我认为问题可能是由于线程造成的,所以我将所有内容都移到了同一个线程,只是为了检查。不,问题仍然存在。
所以现在,我有点不知道下一步该尝试什么?任何建议将不胜感激。
【问题讨论】:
-
两个建议(但不值得作为“答案”发布):(1)尝试使用 NSXMLStoreType 而不是 NSSQLiteStoreType - 只是为了看看你得到什么样的堆栈跟踪。 (2) 使用 NSZombieEnabled 来查看是否过度释放了作为保存的一部分的 NSManagedObject。
-
这是整个错误消息还是它还抱怨缺少符号?
-
我已经开启了僵尸追踪,并且没有关于过度释放对象的投诉。我会试试 XMLStore 看看它是否有所作为。
-
这是整个消息:“检测到尝试调用 iPhone 上不存在的系统库中的符号:_Unwind_Resume 从函数调用 - [NSSQLCore performChanges] in image CoreData。”