关于我动态填充 NSTableView 的方式感觉有些不对

Something doesn't feel right about how I am dynamically populating an NSTableView

这是我的对象层次结构: NSWindowController 拥有一个 NSViewController,这是我 NSTableViewData SourceDelegate

NSWindowController 从互联网上获取一些数据,并将其传递给 NSViewController,以便它可以填充 NSTableView。这是异步发生的,因此 NSTableView 最初加载了 0 行。

NSViewController 拥有 NSTableView,以及一个 NSArray(作为 Data Source)。这两个属性都是私有的。

从这里我对我的实现没有信心: NSWindowController 完成获取数据后,我在 NSViewController 上调用 public 方法,我将其命名为 -addStringToArray:(NSString*) (以避免创建数组 public 然后直接在 NSArray 上调用 -addObject)。 -addStringToArray 就在私人 NSArray 上调用 -addObject,并且 调用 [self.tableView reloadData]。在这个位置的这个调用是我主要勾画出来的地方(尽管我很乐意在这里对我的解决方案的任何部分进行任何输入)

因为加载 NSTableView 时,它有 0 行,当 Data Source (NSViewController) 方法 -numberOfRowsInTableView 被调用时,它 returns 0. 这反过来使得 Delegate 方法 -viewForTableColumn... 永远不会被调用,因为(我假设)它认为有 0 行。

要调用此方法,我需要调用 NSTableView-reloadData

TL;DR: Table 加载了 0 行。 将字符串添加到数组。 每添加一个字符串调用reloadData。 这调用 -numberOfRowsInTableView,其中 returns 数组的大小。 这也允许调用 -viewForTableColumn...,然后调用 returns 适当的字符串,然后填充 table.

我是否以最佳方式将项目动态添加到我的 NSTableView 中?

你的方法很好。假设您的目标是部署到 10.7 或更高版本,您可以在更改数据模型后使用 -[NSTableView insertRowsAtIndexes:withAnimation:]。这样可以避免完全重新加载数据。