关于我动态填充 NSTableView 的方式感觉有些不对
Something doesn't feel right about how I am dynamically populating an NSTableView
这是我的对象层次结构:
NSWindowController
拥有一个 NSViewController
,这是我 NSTableView
的 Data Source
和 Delegate
。
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:]
。这样可以避免完全重新加载数据。
这是我的对象层次结构:
NSWindowController
拥有一个 NSViewController
,这是我 NSTableView
的 Data Source
和 Delegate
。
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:]
。这样可以避免完全重新加载数据。