Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 有些东西不';我觉得动态填充NSTableView的方式不对_Objective C_Macos_Cocoa - Fatal编程技术网

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
,它是my
NSTableView
数据源
委托

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还不存在,我不确定它是如何工作的。