如何在填充与之关联的NSMutableArray(bind)时刷新NSTableVIew

Oma*_*ayr 2 objective-c nstableview nstablecolumn nsarraycontroller cocoa-bindings

我试图把我绑NSArraycontroller在一个NSMutableArray; 该数组包含"iData"类型的对象(它是一个自定义类).该类还包含一些NSMutableString变量,这些变量被设置为KVC的键.然后我将my绑定NSTableColumnNSArrayController并分别设置每列的关键模型路径.

当我尝试填充数组时,GUI不会显示任何内容.我忘记了什么?

Ste*_*her 12

所以很可能你很久以前就已经解决了这个问题,但万一其他人偶然发现了这个问题......

我通过填充数组NSMutableArray,但我不知道如何填充数组NSArrayController,因为我在Controller.m类中没有实例.请告诉我如何解决此问题.

你可能正在做类似的事情

[myData addObject:someObject];
Run Code Online (Sandbox Code Playgroud)

但是,您NSArrayController不会了解NSMutableArray实例的此更改,因为addObject它不符合KVC.您需要通知任何正在观察您的NSMutableArray实例已更改的对象.至少有两种方法可以做到这一点.假设您的NSMutableArray实例属性名为"myData",那么您可以执行以下操作:

[self.willChangeValueForKey:@"myData"];
[myData addObject:someObject];
[self.didChangeValueForKey:@"myData"];
Run Code Online (Sandbox Code Playgroud)

要么

NSMutableArray *bindingsCompliantArray = [self mutableArrayValueForKey:@"myData"];
[bindingsCompliantArray addObject:someObject];
Run Code Online (Sandbox Code Playgroud)

另一个SO答案(链接)有一个很好的解释mutableArrayValueForKey实际上做了什么,但我建议阅读关于键值编码和键值观察的Apple开发人员文档,以帮助理解它.

我在mainmenu.nib托盘中拖动了NSController实例.我需要在我的Controller.h文件中声明一个IBOutLet NSArrayController,然后将它与托盘中的NSArrayController实例连接吗?

您需要NSArrayController在nib文件中有一个实例,但是您在界面中不需要IBOutlet来处理您在此处描述的情况.该NSArrayController应绑定到你的钥匙NSMutableArray(MYDATA的在我的例子),它听起来就像你已经有你的表列正确绑定.