【问题标题】:Programmatically update a TableView that is governed by Cocoa Bindings以编程方式更新由 Cocoa 绑定管理的 TableView
【发布时间】:2013-09-13 04:10:00
【问题描述】:

我对 obj-c 和 cocoa 还很陌生,所以请多多包涵:

我有一个使用可可绑定设置的 NSTableView,它可以通过我的 nib 中的 NSArrayController 实例提供的简单 -add -remove 等方法按预期工作。我想以编程方式将对象添加到为该控制器(以及因此为表视图)提供内容的数组中,然后相应地更新视图。

我目前有一种向数组添加新对象的工作方法(由 NSLog 验证),但我不知道如何更新表格视图。

所以:如何更新绑定的 tableview?(即,在我以编程方式将对象添加到我的数组之后)。 我基本上是在使用胶水代码中的一些视图刷新代码,例如 [view reloadData],但我希望它能够与我现有的绑定一起使用。

或者这个问题有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 列通过绑定到我的 AppController 实例的数组控制器适当地绑定到这些属性。

在旁注/作为替代。如何向现有的 NSArrayController 方法 -add 添加功能,即:-addWithFirstName:andLastName 并且仍然与绑定兼容?

【问题讨论】:

  • 看看这个。如果您需要更多信息,请告诉我stackoverflow.com/questions/18457346/…
  • 为 NSArrayController 设置一个 IBOutlet 并尝试在 数组控制器 而不是数组上调用 addObject:
  • 完美,非常感谢你们 :) 我尝试了两种方法;使数组控制器成为一个出口然后调用重新排列对象;也直接在控制器上调用 addObject 。两者都工作得很好。由于代码较少,我倾向于第二种方法,但是这样做有什么默认的缺点吗?
  • 请不要使用 cmets 发布答案。发布答案,以便可以关闭问题。

标签: cocoa nstableview cocoa-bindings


【解决方案1】:

如果您的阵列控制器绑定到clientsArray,您有两个主要选项来执行此操作。

第一种方法是只使用数组控制器的addObject:方法,而不是直接向clientsArray添加对象。

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

[self willChangeValueForKey:@"clientsArray"];

[self didChangeValueForKey@"clientsArray"];

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多