我有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
- 魔法或其他我错过的内容。我已经尝试将数组控制器设置为willChangeValueForKey
和dataSource
delegate
,但似乎也不起作用(无论如何,我不清楚NSTableView
和dataSource
绑定是如何相互关联的“。
答案 0 :(得分:2)
当您使用内容填充数组时,是否重新分配不可变数组或附加到可变数组?无论哪种方式,它都无法满足您的期望。
当您以这种方式设置数组控制器的内容时,阵列控制器只是复制内容而不是保留引用。后续更改将无效,无论它是否为可变数组(也不是重新分配模型的contactsArray)。
相反:
插入内容时,在阵列控制器上调用-add:
。这可能对你的情况没有帮助。
如果使用不可变数组,则可以将数组控制器绑定到myModel
的{{1}}键,而不是分配它。
如果您使用可变数组,我认为这不会起作用。您可以在模型中创建第二个数组控制器,并将视图的数组控制器绑定到contactsArray
。也许有更好的方法,但这就是我过去所做的。