gpt4 book ai didi

cocoa - NSArrayController 绑定(bind)到 NSTableView 中的一对多关系

转载 作者:行者123 更新时间:2023-12-03 16:57:23 24 4
gpt4 key购买 nike

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

我正在使用绑定(bind)来用我的属性列表填充我的表格 View :

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”方法的按钮:

- (IBAction)addProperty:(id)sender {
NSLog(@"Add a new property");

PCSDescriptionProperty *property = [PCSDescriptionProperty insertInManagedObjectContext: self.storage.managedObjectContext];
property.name = @"New property";
property.info = @"New property info";

[self.descriptionObject addPropertiesObject: property];
}

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

知道为什么吗?谢谢!

最佳答案

表格View一旦绘制就不会刷新。您需要在表格 View 上显式调用reloadData[yourTableView reloadData]; 设置属性后。

执行相同操作的另一种方法是:将属性添加到描述后,还将属性添加到 arrayController。 [self.controller addObject:property]; 它将把对象追加到 tableView 并且不需要刷新。

如果不起作用,(不推荐的方法)重置 tableView 的内容。

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

关于cocoa - NSArrayController 绑定(bind)到 NSTableView 中的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22030804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com