将NSTableView绑定到NSArrayController而不是直接从我的模型数组中获取数据

时间:2012-02-06 18:02:43

标签: objective-c cocoa nstableview nsarraycontroller

现状:直接绑定

我有NSTableView,显示来自NSArray个自定义对象的数据。

所需方法:阵列控制器

然而,使用NSArrayController作为我的arbritary模型对象的外观将是“更好的做法”。

所以我在我的应用程序中复制了表格,并创建了一个新的NSViewController,我将Table Content的{​​{1}}绑定到NSTableView。我为这个类添加了NSArrayController,所以我现在可以像这样设置我的View Controller:

IBOutlet

现在,因为我将表视图的ContactListViewController *myVC = [[ContactListViewController alloc] init]; // Tell the ArrayController where the content-array is. myVC.contactsArrayController.content = self.myModel.contactsArray; 绑定到数组控制器,我希望,只要我用数据(来自远程服务)填充数组,就会更新tableview,这是我直接绑定到Table Content的其他方法的情况。

问题:没有数据

但是,该表仍为空。我是否必须为此工作设置其他内容(可能是一些myModel.contactsArray - 魔法或其他我错过的内容。我已经尝试将数组控制器设置为willChangeValueForKeydataSource delegate,但似乎也不起作用(无论如何,我不清楚NSTableViewdataSource绑定是如何相互关联的“。

1 个答案:

答案 0 :(得分:2)

当您使用内容填充数组时,是否重新分配不可变数组或附加到可变数组?无论哪种方式,它都无法满足您的期望。

当您以这种方式设置数组控制器的内容时​​,阵列控制器只是复制内容而不是保留引用。后续更改将无效,无论它是否为可变数组(也不是重新分配模型的contactsArray)。

相反:

  1. 插入内容时,在阵列控制器上调用-add:。这可能对你的情况没有帮助。

  2. 如果使用不可变数组,则可以数组控制器绑定到myModel的{​​{1}}键,而不是分配它。

  3. 如果您使用可变数组,我认为这不会起作用。您可以在模型中创建第二个数组控制器,并将视图的数组控制器绑定到contactsArray。也许有更好的方法,但这就是我过去所做的。