如何从这个可变数组更新NSTableView在Cocoa中工作?

时间:2011-03-08 17:28:38

标签: cocoa nstableview cocoa-bindings

在我的应用程序中,我有一个NSTableView,它应该包含一个文件列表。我有一个按钮,用于打开对话框并以编程方式将文件添加到此列表中。有一段时间,我在添加文件时无法更新表视图,因为我使用了以下代码:

[self.newPackage.files addObject:fileURL];

现在我觉得这不行。据我了解,上面的代码行将改变可变数组“在控制器的后面。”

我能够将一个主要来自this question的工作解决方案与以下代码拼凑在一起:

NSMutableArray *bindingsCompliantArray = [[self valueForKey:@"newPackage"] mutableArrayValueForKey:@"files"];
[bindingsCompliantArray addObject:fileURL];

但是,我不明白这是如何运作的。 bindingsCompliantArray也没有在其他任何地方使用。我看过documentation for mutableArrayValueForKey,但它并没有让它更清晰。是否有人可以帮助解释这是如何工作的?

2 个答案:

答案 0 :(得分:1)

‑mutableArrayValueForKey:方法返回一个代理数组,您可以将其视为原始数组,并且观察数组的任何KVO观察者都会观察到对数组所做的更改。

NSController子类(例如NSArrayController)使用键值观察来监视他们观察到的对象的更改。

当您通过此方法收到代理服务器阵列时,观察员会注意到NSMutableArray‑addObject:方法,而使用标准数组则不会这样。

答案 1 :(得分:0)

您正在使用addObject方法更新阵列,我认为麻烦仍然存在。尝试通过使用新值设置NEW数组来更新它。它应该工作! = d

祝你好运!