Cocoa NSArrayController绑定到NSTableView中的一对多关系

Cocoa NSArrayController绑定到NSTableView中的一对多关系,cocoa,core-data,cocoa-bindings,nsarraycontroller,Cocoa,Core Data,Cocoa Bindings,Nsarraycontroller,我正在使用核心数据开发一个应用程序。我的模型基本上是一个对象列表,称为“描述”。每个描述都有一个“属性”列表。这是一个非常简单的一对多关系。我有一个NSTableView,它包含两列 我正在使用绑定将我的属性列表填充到表视图中: self.controller = [[NSArrayController alloc] initWithContent: self.descriptionObject.properties]; NSTableColumn *propertyColumn = [sel

我正在使用核心数据开发一个应用程序。我的模型基本上是一个对象列表,称为“描述”。每个描述都有一个“属性”列表。这是一个非常简单的一对多关系。我有一个NSTableView,它包含两列

我正在使用绑定将我的属性列表填充到表视图中:

self.controller = [[NSArrayController alloc] initWithContent: self.descriptionObject.properties];

NSTableColumn *propertyColumn = [self.propertiesTableView tableColumnWithIdentifier: @"property_column"];
[propertyColumn bind: NSValueBinding toObject: self.controller withKeyPath: @"arrangedObjects.name" options: nil];

NSTableColumn *infoColumn = [self.propertiesTableView tableColumnWithIdentifier: @"info_column"];
[infoColumn bind: NSValueBinding toObject: self.controller withKeyPath: @"arrangedObjects.info" options: nil];
我有一个按钮可以调用我的“addProperty”方法:

问题是,调用
addPropertiesObject:
不会触发KVO通知,并且不会刷新我的tableview。我尝试在使用addPropertiesObject前后调用willChangeValueForKey/didChangeValueForKey,但没有成功

知道为什么吗?
谢谢

一旦绘制,表视图将不会刷新。您需要在表视图上显式调用
reloadData
<代码>[yourTableView重新加载数据]

执行相同操作的另一种方法是:将属性添加到描述之后,还要将属性添加到arrayController<代码>[self.controller addObject:property]它会将对象附加到tableView,不需要刷新

如果什么都不起作用,(不是推荐的方法)重置tableView的内容

[self.controller setContent:self.descriptionObject.properties];

多亏了Duncan Groenewald,我做到了:我停止使用initWithContent:并将我的属性集绑定到ArrayController的NSContentSet:

self.controller = [[NSArrayController alloc] init];
[self.controller bind: NSContentSetBinding toObject: self.apiDescription withKeyPath: @"properties" options: nil];
然后,在我的addProperty:method中,我所要做的就是将我的新属性添加到我的description one中的方式颠倒过来:

property.descriptionObject = self.descriptionObject;

尝试设置property.description=self.descriptionObject,而不是将属性添加到描述对象。还要确保您已正确设置了这两个关系。我将ArrayController实体设置为@“Property”,其managedObjectContext设置为managedObjectContext,其contentSet设置为description.properties。在IB中就是这样做的。实际上,这种关系是有效的,因为我可以看到正在保存的更改,这实际上是NSArrayController的内容没有被“重新获取”。您仍然应该将contextSet绑定到descriptionObject.properties,以用于多个关系。不要使用initWithContent。这是我当时添加的:self.controller=[[NSArrayController alloc]init];[self.controller绑定:NSContentSetBinding to对象:self.descriptionObject with KeyPath:@“属性”选项:nil];现在它工作了!谢谢现在有办法自动触发NSTableView刷新了吗?我敢肯定,当我使用一个NS(可变)数组作为我的数组控制器的内容时,我曾经尝试过这样做。我也会尝试将该对象添加到我的集合中,但是。。meh。如果仅添加到数组对象,则需要重新加载NSTableView的数据。NSArrayController将在内部处理该部分。现在我使用绑定并不是这样,而是+1表示答案:)
property.descriptionObject = self.descriptionObject;