【问题标题】:NSTableView not all datasource methods are getting callsNSTableView 并非所有数据源方法都在调用
【发布时间】:2013-02-21 14:59:52
【问题描述】:

我以编程方式创建了一个表格视图并成功添加了列、委托和数据源。但问题是只有一种数据源方法被调用,即

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

正如这里提出的问题: NSTableView: only numberOfRowsInTableView: datasource is called

但是这个问题没有具体的答案。

这是我创建 TableView 的代码:

customTableView=[[NSTableView alloc]initWithFrame:frame];
[customTableView setBackgroundColor:[NSColor redColor]];
customTableView.delegate=self;
customTableView.dataSource=self;
NSTableColumn * column1 = [[NSTableColumn alloc] initWithIdentifier:@"Col1"];
[column1 setWidth:frame.size.width];
[customTableView addTableColumn:column1];
[self addSubView:customTableView];
[customTableView reloadData];

此外,我所有的数据源方法都在同一个类中。

编辑:我在单独的视图类中创建这个 TableView,而不是在 ViewController 或 AppDelegate 中。

【问题讨论】:

  • 提供您在 numberOfRowsInTableView 中使用的代码。还要指定您在哪里初始化数据(可能是 NSArray),这是您提供的链接中出现的问题。
  • 以上代码是在 awakeFromNib 还是 init 中?
  • 你在使用自定义的tableview吗
  • @Rakesh:我只是返回 10 作为初始测试的数字。
  • @AKV:仅在 init 方法中。

标签: objective-c osx-lion nstableview


【解决方案1】:

我认为您缺少将表格视图作为子视图添加到窗口的代码。

假设您在其中创建表视图的对象具有window 属性。以下方法可以解决问题:

[[self.window contentView] addSubview:customTableView];

【讨论】:

  • 我在 appdelegate 课程中所做的那件事。我在单独的视图文件中创建此表视图并将该视图放入 appdelegate 的窗口中。
  • 问题实际上是为什么不是所有的数据源方法都被调用,只有一个?我已经通过放置断点来检查它。
  • 您在视图的哪个方法中添加了代码行。因为我在没有上述代码行的情况下尝试了这段代码,并且发生了同样的问题。可能 reloadData 在 tableview 添加到窗口之前触发,或者方法的执行顺序发生了一些变化,导致数据源方法不被触发。
  • 其实,我首先尝试不调用 reloadData 方法,但问题是一样的。所以,我调用了这个方法,看看这次可能会调用数据源方法。但结果还是一样。
  • 以及您在哪个视图方法中编写代码来创建表格视图
【解决方案2】:

我猜你已经在init 中编写了所有方法。

尝试将setDatasourcesetDelegate 移动到awakeFromNib

【讨论】:

  • 在 awakeFromNib 中使用 set delegate 和 datasource 有什么具体原因。我的视图没有使用任何 nib 文件。
  • 第一个 nib 被加载,init 被调用。
  • 目前我没有mac,否则我会检查这个问题。
  • 但正如我所说,在我的观点中我无处使用笔尖。
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 2012-07-30
  • 1970-01-01
相关资源
最近更新 更多