【问题标题】:NSTableView: only numberOfRowsInTableView: datasource is calledNSTableView:只有 numberOfRowsInTableView:数据源被调用
【发布时间】:2012-09-06 16:30:31
【问题描述】:

我遇到了一个关于NSTableView 的问题,它是这样的: tableview 的一个数据源被调用:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
    return [self.dataArray count];
}

但是这个永远不会被调用:

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    // the code 
}

我检查了数组确实有数据,还检查了 [NSTableView reloadData] 在主线程中被调用。

所以我完全迷失了这个奇怪的问题。 有人会给出一些提示吗? 谢谢!

【问题讨论】:

  • 您使用的是基于视图的表格视图吗?
  • 你是否检查过你是否在.h文件中告知了委托和日期源方法,并在.xib文件中将tableView的数据源出口连接到你的类
  • 您是否记录了 [self.dataArray count] 以检查它是否返回 0?另外,您的表格单元格是基于还是基于视图?
  • @Samir,@rdelmar 它是基于视图的。我尝试使用基于单元的,但遇到了同样的问题。
  • @VigneshKumar,我在 nib 中连接了数据源和委托。当 -[tableview numberOfRowsInTableView:] 被调用时,我也打印了它们。

标签: cocoa nstableview


【解决方案1】:

我将初始代码从awakeFromNib 移动到init,并且调用正确。但我仍然不知道真正的原因。我想这对视图的生命周期很重要,因为具有 tableview 的类是NSObject 的子类,而不是NSViewController 的子类。

【讨论】:

  • 我的问题是我在填充数组之前调用了“setDataSource:self”,因此我的应用程序在它有任何东西之前调用了“numberOfRowsInTable”!只需将“setDataSource:self”向下移动(现在是我的“awakeFromNib”中的最后一件事解决了这个问题)。 "init" 在 "awakeFromNib" 之前调用(前者在对象创建时调用,后者在 nib 加载时调用)。这可能就是为什么这对你有用。同样的,在设置数据源之前先填充数组!
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多