Objective c 核心数据NSArrayController不';t保存或撤消编程元素
我在OS X中有一个基于文档的Cocoa应用程序,其核心数据备份为Objective c 核心数据NSArrayController不';t保存或撤消编程元素,objective-c,macos,swift,cocoa,core-data,Objective C,Macos,Swift,Cocoa,Core Data,我在OS X中有一个基于文档的Cocoa应用程序,其核心数据备份为NSArrayController,绑定到NSTableView和“添加”和“删除”按钮的列 这一切都很好,使用这些绑定添加和修改的对象将添加到撤消堆栈中,并按预期保存到文件中 但是,当我以编程方式执行I.addObject()时,它会反映在表中(因此,似乎是NSManagedObjectContext),但不会添加到撤消堆栈中,也不会保存到文件中 我错过了什么?我的NSArrayController中的某些设置?还是在.addO
NSArrayController
,绑定到NSTableView
和“添加”和“删除”按钮的列
这一切都很好,使用这些绑定添加和修改的对象将添加到撤消堆栈中,并按预期保存到文件中
但是,当我以编程方式执行I.addObject()
时,它会反映在表中(因此,似乎是NSManagedObjectContext
),但不会添加到撤消堆栈中,也不会保存到文件中
我错过了什么?我的NSArrayController
中的某些设置?还是在.addObject()之后调用其他调用
我听说过与类似问题相关的“将内容作为复合值处理”,但这似乎是在使用内容数组绑定时发生的,我不是。您是否在NSArrayController管理的数组上调用.addObject()
?这是行不通的,因为您正在绕过核心数据
要以编程方式插入,请使用insertNewObjectForEntityForName(inManagedObjectContext)
。然后阵列控制器将看到更改。或者在您的阵列控制器上调用add()
,这就是您的add按钮所做的。但是,insertNewObjectForEntityForName()
是一个更好的选择,因为它的工作与您是否有活动的NSDocument无关。我正在调用我的NSArrayController
上的.addObject(instanceOfNSManagedObject)
add()
按预期工作,但当然会创建默认的初始化对象。啊,它与.add()
或一起工作。insertNewObjectForEntityForName(…)
,然后设置对象参数,谢谢。虽然我仍然认为如果.addObject(…)
失败,我一定是设置错误了。数组上的addObject()将失败。你在添加什么对象?您使用alloc/init创建的NSManagedObject?核心数据是不同的。您必须告诉MOC创建对象。我相信您的设置是正确的,但您的插入代码是错误的。我们可以看到吗?我调用的是NSArrayController
。addObject(…)
,但不是数组。我只是仔细查看了NSArrayController的文档<代码>添加:表示它创建并添加一个对象<代码>添加对象:仅添加。我认为.addObject()
适用于NSArray控制器管理常规NSArray而不是核心数据所有的NSArray的情况。我认为,您的InsertingManagedObjectContext应该为InsertingManagedObjectContext参数(可能是self.document.managedObjectContext)提供一个非nil参数。