保存时出现错误时核心数据崩溃:从函数调用_Unwind_Resume - 图像CoreData中的[NSSQLCore performChanges]

时间:2011-03-04 18:12:58

标签: iphone core-data

我有点卡在这个核心数据错误上。我在应用程序上的基本设置是在初始化时加载一些基本数据。让我们称他们为部门和员工。在初始化时,我只会加载与应用程序当前用户相关的部门和员工。

然后,用户可以搜索其他部门和/或员工。例如,当他们为艺术部门进行搜索时,服务器会返回该部门的前20名员工。代码将新部门存储到核心数据中,并将员工存储到核心数据中。我使用2个线程,一个用于将数据存储到上下文中的实际工作,另一个用于在GUI上显示数据。我使用mergeChangesFromContextDidSaveNotification方法来合并更改。

部门的存储始终有效,但行:

BOOL ok = [importContext save:&errorSave];

始终导致_unwind_resume错误。我已经接受了here的建议。关闭Ob​​jective 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名员工已经导入,并且会更新(根据需要),并插入其他员工。导入上下文似乎正确看到了。

我还检查过以确保数据模型没有无效的非可选属性。

我认为这个问题可能是由于线程问题造成的,所以我已经将所有内容都移到同一个线程中,只是为了检查。不,问题仍然存在。

所以现在,我有点不知道下一步该尝试什么?任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我很确定_Unwind_Resume是异常处理堆栈的一部分。所以,它真的告诉你的是系统无法处理的异常。

我会评论您在managedObjects上可能拥有的任何保留和版本,尤其是您可能标记为autorelease的任何保留和版本。错误管理版本可能导致未保存的托管对象从对象图中消失,从而创建w

答案 1 :(得分:0)

好的,看起来很奇怪,我认为问题是数据模型中的类型与实际数据不匹配。在数据模型中,我将其中一个字段错误地定义为Int32,实际上它应该是一个浮点数。

虽然我不完全理解为什么在第一次保存时它始终有效,但是第二次尝试保存时,我得到了上述错误。

现在,随着数据类型的改变,多次保存按预期工作。

希望错误消息不那么透明!