0

我有一个带有 NSTableColumn 的 NSTableView,里面有一个 NSButtonCell(一个复选框),每次添加一行时都会生成一个新的 NSButtonCell 实例,我在 IB 中配置了它。但是,我很好奇为什么在下面的代码块中第二个 NSLog 返回 0。

NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]);
[[self.tableView preparedCellAtColumn:0 row:0]setState:1];
NSLog(@"%ld", (long)[[self.tableView preparedCellAtColumn:0 row:0]state]);

它返回 0 的事实意味着我正在向 NSButtonCell 的实例发送消息,对吗?那么为什么 setState: 不改变第二个 NSLog 的返回值呢?

4

1 回答 1

0

如果它正在接收nil它也会打印0,我建议尝试这个

NSLog(@"cell:%@", [self.tableView preparedCellAtColumn:0 row:0])

以确保您实际上从表格视图中获得了有效的单元格对象。

你从哪里调用该代码?在表格已经显示之后?在初始化期间?

如果是前者,那么应该有一个可用的单元格,如果是后者,那么它可能尚未从池中创建或重新分配。

尝试NSLog上面的命令以确保您实际上得到了一个单元格,而不是nil从表格视图中获取。

于 2014-01-26T07:46:15.323 回答