对NSButtonCell状态感到好奇

时间:2014-01-26 01:27:34

标签: objective-c cocoa nstableview nscell

我有一个带有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的返回值?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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