0

我有一些核心数据项目的麻烦。我有一个带有NSManagedObjects的NSArrayController和+/- 按钮。如果我在保存文件后删除了一行中的对象,它可以很好地工作,但是如果我添加一个新对象并立即删除它(不更改任何默认值),则出现错误:核心数据:错误,如果删除未保存的对象

Serious application error. Exception was caught during Core Data change processing: Unknown number type or nil passed to arithmetic function expression. with userInfo (null) 
Unknown number type or nil passed to arithmetic function expression. 

如果我撤消添加新对象,情况也是如此。

任何人都可以给我一个指针该怎么办?我认为这与它只有一个临时ID有关,但如何解决它我不知道。

回答

1

我发现问题和解决方案。为了记录我会描述它。

问题是init函数中的对象本身添加了一个观察者。这可能是触发错误的原因。如果我在删除对象之前删除自己作为观察者,错误不会产生。

+2

你应该**不**覆盖'NSManagedObject'的'-init ...'方法和它的'-dealloc'方法。如果你需要添加一个观察者,你应该在'-awakeFromInsert'和'-awakeFromFetch'中执行。 – 2010-07-28 23:28:56

+0

根据文档“覆盖注意事项的方法”,initWithEntity:insertIntoManagedObjectContext:amd dealloc是否被允许覆盖?我使用init而不是唤醒的原因是因为我发现唤醒并不总是callen(如果用户撤销或某事)。但我可能是错的。 – 2010-07-29 08:28:23

+0

你是正确的撤销和重做,在10.6+有另外的方法awakeFromSnapshotEvent这也是撤销/重做中调用。作为10.5的解决方法,我更改了ManagedObjectContext以允许撤消和重做工作观察http://github.com/mbrugger/CoreDataDependentProperties/blob/master/LPAutomatedObserving/Classes/LPManagedObjectContext.m – 2010-07-29 16:57:10

0

表通常不包含NSManagedObjects。相反,NSArrayController通过绑定或符合NSTableViewDataSource的对象将受管对象的属性作为值提供。在这些场景中提供的选定对象的删除可以通过多种方式完成。问题是,你根本没有解释你的案例是如何建立的。

是否有可能删除(无论您的按钮连接到哪个目标/动作)是通过零还是意外?我可以想象一个类似的吓人的错误,如果你问一个托管的对象上下文来删除浮点值或其他一些随机的东西...

+0

对不起,我有点快速的描述。正如你所说的一个持有这些对象的NSArrayController,并绑定到一个NSTableView。 我试图把检查对象,我要删除的对象是正确的,它是。没有什么问题。这个错误也会先发生(1个或多个runloops) – 2010-07-28 16:11:18

+0

Ssssooooo .....你正在删除对象吗? *究竟*是如何约束的?帮助我们帮助你。 – 2010-07-28 16:52:57

+0

绑定完全在书后面。 NSArrayController设置为实体模式,我的对象设置为实体名称。该表是绑定公关。在属性上的列。我不认为问题在这里。 - 我试过不同的删除方法。他们都产生相同的错误([arrayController removeObject:theObject]和[managedObjectContext deleteObject:theObject])但正如我所说,错误也是当我按撤消。所以只需通过sayin添加对象 - >撤消错误生成。 任何想法错误实际上意味着什么? – 2010-07-28 17:55:31

相关问题