2010-02-14 33 views
2

我遇到了iPhone上的Core Data项目的问题。当用户开始添加对象,然后在该过程中取消时,会发生此情形。如何从managedObjectContext中删除未保存的对象

如果用户点击取消并返回到对象列表,那么会列出一个虚拟对象,表示它们在创建过程中的对象。这绝不会保存到数据库 - 当用户点击保存按钮时,保存按预期发生。

当加载在用户增加了数据的数据视图控制器,I创建一个新的Thing对象 - 这是我加入核心数据实体:

myThing = [NSEntityDescription insertNewObjectForEntityForName:@“myThing” inManagedObjectContext:managedObjectContext];

我试图在我的取消方法来删除如下:

[managedObjectContext DeleteObject的:myThing];

当我这样做,我得到一个EXC_BAD_ACCESS,当我打取消。在调试器中遍历代码,它通过了cancel方法,但是这是在根视图控制器中生成的,其中列出了我的对象以及我尝试创建此对象之前的位置。

所有我试图实现的是允许用户添加一个新的对象,但取消部分通过。

任何想法是什么导致此错误?我无法生成这个不幸的是:(

回答

2

您对对象的方法取消堆栈跟踪是典型的和适当的。

内存错误是常见的,可以是艰难的调试,你必须运行静态分析?你可能想从上下文删除它后设置你的“myThing”引用到零。

你肯定知道这是取消的工作流程,是导致内存错误?

+0

我很确定这是取消。如果我保存,一切正常。如果我删除[... deleteObject:myThing];从取消方法,然后崩溃不再发生。 在这个控制器中使用不同的托管上下文而不是由RootController传入的是否有意义? – Anonymouslemming

+0

嗯 - 忽略我以前的评论。在取消方法中设置myThing = nil似乎可以解决此问题。 我在dealloc方法中正在做[myThing发布],但只是将它设置为零就让问题消失了。 谢谢! – Anonymouslemming

0

也可以打开在NSZombie上找到正在被访问的对象,这将帮助你快速追踪这个问题。谷歌NSZombie的几个例子如何使用它。

相关问题