我有点迷失了......似乎我找不到为什么我不能从我的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的绑定或什么?
答案 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
而不是标量整数。