Objective c 有些东西不';我觉得动态填充NSTableView的方式不对
这是我的对象层次结构:Objective c 有些东西不';我觉得动态填充NSTableView的方式不对,objective-c,macos,cocoa,Objective C,Macos,Cocoa,这是我的对象层次结构: NSWindowController拥有一个NSViewController,它是myNSTableView的数据源和委托 NSWindowController从internet获取一些数据,并将其传递到NSViewController,以便它可以填充NSTableView。这是异步发生的,因此NSTableView最初加载0行 NSViewController拥有NSTableView,以及NSArray(作为数据源)。这两个属性都是私有的 从这里开始,我对自己的实施没
NSWindowController
拥有一个NSViewController
,它是myNSTableView
的数据源
和委托
NSWindowController
从internet获取一些数据,并将其传递到NSViewController
,以便它可以填充NSTableView
。这是异步发生的,因此NSTableView
最初加载0行
NSViewController
拥有NSTableView
,以及NSArray
(作为数据源
)。这两个属性都是私有的
从这里开始,我对自己的实施没有信心:
一旦NSWindowController
完成数据提取,我就在NSViewController
上调用一个公共方法,我将其命名为-addStringToArray:(NSString*)
(以避免将数组公开,然后直接在NSArray
上调用-addObject
)-addStringToArray
然后调用私有NSArray
上的-addObject
,并且也调用[self.tableView reloadData]
。在这个位置的这个调用是我大致描述的地方(尽管我很乐意在这里接受关于我的解决方案的任何部分的任何输入)
因为当加载NSTableView
时,它有0行,当调用数据源(NSViewController
)方法-numberOfRowsInTableView
时,它返回0。这又使得委托
方法-viewForTableColumn…
永远不会被调用,因为(我假设)它认为有0行
要调用此方法,我需要调用NSTableView
的-reloadData
TL;博士:
表中加载了0行。
向数组中添加字符串。
每次添加字符串时,调用重新加载数据
。
这将调用-numberOfRowsInTableView
,它返回数组的大小。
这还允许调用-viewForTableColumn…
,然后返回相应的字符串,然后填充表
我是否以最佳方式将项目动态添加到NSTableView中?您的方法很好。假设您的目标是部署到10.7或更高版本,则可以在更改数据模型后使用-[NSTableView insertRowsAtIndexes:withAnimation:
。这避免了数据的完全重新加载。对于没有绑定的实现来说,这听起来并不过分。您可以尝试reloadDataForRowIndexes:columnIndexes:
,但如果rowIndexes还不存在,我不确定它是如何工作的。