gpt4 book ai didi

cocoa - 以编程方式更新由 Cocoa Bindings 管理的 TableView

转载 作者:行者123 更新时间:2023-12-03 17:12:22 25 4
gpt4 key购买 nike

我对 obj-c 和 cocoa 还很陌生,所以请耐心等待:

我有一个使用 cocoa 绑定(bind)设置的 NSTableView,它可以按预期使用我的 Nib 中 NSArrayController 实例提供的简单 -add -remove 等方法。我想以编程方式将对象添加到为此 Controller (以及 TableView )提供内容的数组,然后相应地更新 View 。

我当前有一种向数组添加新对象的工作方法(通过 NSLog 验证),但我不知道如何更新 TableView 。

那么:如何更新绑定(bind)的表格 View ?(即,在我以编程方式将对象添加到数组之后)。 我本质上是在使用粘合代码中的一些 View 刷新代码,例如 [view reloadData],但我希望它能够与我现有的绑定(bind)一起使用。

或者有KVC/KVO相关的解决方案来解决这个问题吗?

代码详细信息:AppController.h

@interface AppController : NSObject

@property NSMutableArray *clientsArray;

-(IBAction)addClientFooFooey:(id)sender;

@end

AppController.m(注意,我还有适当的 init 方法,此处未显示)

@implementation AppController
...

-(IBAction)addClientFooFooey:(id)sender{
[self.clientsArray addObject:[[Client alloc] initWithFirstName: @"Foo" andLastName:@"Fooey"]];

//Need some code to update NSTableView here

}

@end

Client.h 只是简单地定义了两个属性:firstName 和 lastName。我的 mainmenu.nib 文件中 NSTableView 的 2 列通过绑定(bind)到我的 AppController 实例的数组 Controller 适本地绑定(bind)到这些属性。

附注/作为替代方案。如何向现有 NSArrayController 方法 -add 添加功能,即: -addWithFirstName:andLastName 并仍然与绑定(bind)兼容?

最佳答案

如果您的数组 Controller 绑定(bind)到 clientsArray,您有两个主要选项可以执行此操作。

第一种方法是仅使用数组 Controller 的 addObject: 方法,而不是直接将对象添加到 clientsArray

另一种方法是保留当前的 ​​addClientFooFooey: 方法,但用这两行包装现有代码:

[self willChangeValueForKey:@"clientsArray"];

[self didChangeValueForKey@"clientsArray"];

这告诉 KVO 系统您正在对数组进行更改,因此它会再次查看它。

第一个选项是最简单的,但如果由于某种原因你需要直接更新数组,只需让 KVO 知道你正在这样做。

关于cocoa - 以编程方式更新由 Cocoa Bindings 管理的 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778162/

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