Objective c NSOutlineView numberOfRows不';t在重新加载数据后增加
我想计算刚刚添加到Objective c NSOutlineView numberOfRows不';t在重新加载数据后增加,objective-c,macos,cocoa,nsoutlineview,Objective C,Macos,Cocoa,Nsoutlineview,我想计算刚刚添加到NSOutlineView的单元格的大小。为此,我将其添加到数据源中,然后在NSOutlineView上调用reloadData。但是,出于某种原因,除了第一行之外,我无法检查reloadData之后的单元格。代码如下所示: [m_dataSource add:...]; // first add item to my data source [m_outlineView reloadData]; int nRows = (int) [m_outlineView num
NSOutlineView
的单元格的大小。为此,我将其添加到数据源中,然后在NSOutlineView
上调用reloadData
。但是,出于某种原因,除了第一行之外,我无法检查reloadData
之后的单元格。代码如下所示:
[m_dataSource add:...]; // first add item to my data source
[m_outlineView reloadData];
int nRows = (int) [m_outlineView numberOfRows];
NSCell *cell = [m_outlineView preparedCellAtColumn:0 row:nRows-1];
NSSize size = [cell cellSize];
出于某种原因,nRows
在这里总是1,不管我添加了多少行。因此,我只能查询第一行中第一个单元格的大小
我看到的行为可能与以下事实有关:第一行是可扩展行,而所有其他行都是第一行的子行。但是,我已经检查过了
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item;
正确返回项目的YES
。所有内容也正确显示在NSOutlineView
中。只是,numberOfRows
似乎没有得到更新,即使我在它之前调用了reloadData
有什么问题吗?这能回答你的问题吗?不幸的是,事实并非如此。即使使用
reloadItem:nil reloadChildren:YES
而不是reloadData
,numberOfRows
仍然返回1,并且除了第一行中的单元格外,我无法检查任何单元格。您是否调试了数据源,以验证实际返回的预期数据(即多于1个项目)?它扩大了吗?根级别上有多少项?@ATV:Oops,对不起,是的,我把isItemExpandable
方法混淆为指示节点应该展开,而它只指示节点是否可展开。使用expandItem
手动展开节点可以解决此问题。抱歉搞混了。@Andreas太棒了!