我有点卡在这个核心数据错误上。我在应用程序上的基本设置是在初始化时加载一些基本数据。让我们称他们为部门和员工。在初始化时,我只会加载与应用程序当前用户相关的部门和员工。
然后,用户可以搜索其他部门和/或员工。例如,当他们为艺术部门进行搜索时,服务器会返回该部门的前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名员工已经导入,并且会更新(根据需要),并插入其他员工。导入上下文似乎正确看到了。
我还检查过以确保数据模型没有无效的非可选属性。
我认为这个问题可能是由于线程问题造成的,所以我已经将所有内容都移到同一个线程中,只是为了检查。不,问题仍然存在。
所以现在,我有点不知道下一步该尝试什么?任何建议都将不胜感激。
答案 0 :(得分:0)
我很确定_Unwind_Resume
是异常处理堆栈的一部分。所以,它真的告诉你的是系统无法处理的异常。
我会评论您在managedObjects上可能拥有的任何保留和版本,尤其是您可能标记为autorelease
的任何保留和版本。错误管理版本可能导致未保存的托管对象从对象图中消失,从而创建w
答案 1 :(得分:0)
好的,看起来很奇怪,我认为问题是数据模型中的类型与实际数据不匹配。在数据模型中,我将其中一个字段错误地定义为Int32,实际上它应该是一个浮点数。
虽然我不完全理解为什么在第一次保存时它始终有效,但是第二次尝试保存时,我得到了上述错误。
现在,随着数据类型的改变,多次保存按预期工作。
希望错误消息不那么透明!