Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 核心数据NSArrayController不';t保存或撤消编程元素_Objective C_Macos_Swift_Cocoa_Core Data - Fatal编程技术网

Objective c 核心数据NSArrayController不';t保存或撤消编程元素

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

我在OS X中有一个基于文档的Cocoa应用程序,其核心数据备份为
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参数。