【问题标题】:How does updating NSTableView from this mutable array work in Cocoa?从这个可变数组更新 NSTableView 如何在 Cocoa 中工作?
【发布时间】:2011-03-08 17:28:37
【问题描述】:

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

[self.newPackage.files addObject:fileURL];

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

我能够拼凑出一个可行的解决方案,主要来自 this question,代码如下:

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

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

【问题讨论】:

    标签: cocoa nstableview cocoa-bindings


    【解决方案1】:

    ‑mutableArrayValueForKey: 方法返回一个代理数组,您可以将其视为原始数组,另外还有一个好处是任何 KVO 观察者都可以观察到该数组的更改。

    NSController 子类如NSArrayController 使用 Key-Value Observing 来监控它们观察到的对象的变化。

    当您通过此方法接收代理数组时,观察者会注意到NSMutableArray 方法(例如‑addObject:),而对于标准数组,情况并非如此。

    【讨论】:

    【解决方案2】:

    您正在使用 addObject 方法更新数组,我认为问题仍然存在。尝试通过使用新值设置新数组来更新它。它应该工作! =D

    祝你好运!

    【讨论】:

    • 我问题中的第二个 sn-p 代码确实有效。我更想知道它为什么或如何工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多