核心数据NSArrayController不保存或撤消编程元素

时间:2015-09-06 18:18:22

标签: objective-c macos swift cocoa core-data

我在OS X中有一个基于文档的Cocoa应用程序,其核心数据支持NSArrayController绑定到NSTableView和“添加”和“删除”按钮的列。

一切正常,使用这些绑定添加和修改的对象会被添加到撤消堆栈并按预期保存到文件中。

然而,当我以编程方式.addObject()时,它会反映在表中(因此看起来似乎是NSManagedObjectContext),但不会添加到撤消堆栈中,也不会保存到文件中。

我错过了什么?我NSArrayController中的一些设置?或.addObject()之后的其他一些电话?

我听说过类似问题中提到的“Handles Content As Compound Value”,但这似乎是在使用Content Array绑定时,我不是。

1 个答案:

答案 0 :(得分:1)

您是否在NSArrayController管理的阵列上调用.addObject()?这不会起作用,因为你绕过了核心数据。

要以编程方式插入,请使用insertNewObjectForEntityForName(inManagedObjectContext)。然后阵列控制器将看到更改。或者在阵列控制器上调用add(),这就是“添加”按钮正在执行的操作。但是insertNewObjectForEntityForName()是一个更好的选择,因为它可以独立于您是否拥有活动的NSDocument而工作。