取消选择NSTableView行时出现异常

时间:2011-09-05 18:56:15

标签: cocoa core-data nstableview

我有点迷失了......似乎我找不到为什么我不能从我的NSTableView中取消选择行。我在Interface Builder中允许空选,但是当我调用deselectRow:或deselectedAll:时,我得到一个异常。

例如,使用以下代码:

NSLog(@"Currently selected row index: %ld", [self.tableView selectedRow]);
[self.tableView deselectRow:[self.tableView selectedRow]];

我明白了:

2011-09-05 MyApp[18939:707] Currently selected row index: 1
2011-09-05 MyApp[18939:707] *** -[__NSArrayM objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 3]

如果我调用deselectRow,我甚至会得到同样的错误:使用硬编码值(比如说0)进行测试。所以我认为错误源自我与NSArrayController的绑定或什么?

3 个答案:

答案 0 :(得分:0)

我的解决方案(如此原始,我知道)

 if(row != UINT64_MAX)

答案 1 :(得分:0)

我在NSTableView#deselectRow内部调用NSTableViewDelegate#tableViewSelectionDidChange,这触发了对tableViewSelectionDidChange方法的另一次调用。在第二个调用中,NSTableView#selectedRow属性等于-1,这是传递给deselectRow的无效值。

为避免这种情况,只需将deselectRow调用包装为selectedRow >= 0条件即可。

答案 2 :(得分:-1)

这样的非常长的整数通常意味着内存地址被转换为整数。反过来,这通常是通过将对象传递给标量变量引起的。

在IB中,查看接口元素的selected object绑定。在某些时候,您将对象移交给deselectRow而不是标量整数。