Cocoa 取消选择NSTableView行时出现异常

Cocoa 取消选择NSTableView行时出现异常,cocoa,core-data,nstableview,Cocoa,Core Data,Nstableview,我对这个有点迷茫。。。似乎我找不到为什么不能从NSTableView中取消选择行。我允许在Interface Builder中进行空选择,但只要调用deseleRow:或deseledAll:,就会出现异常 例如,使用此代码: NSLog(@"Currently selected row index: %ld", [self.tableView selectedRow]); [self.tableView deselectRow:[self.tableView selectedRow]]; 我

我对这个有点迷茫。。。似乎我找不到为什么不能从NSTableView中取消选择行。我允许在Interface Builder中进行空选择,但只要调用deseleRow:或deseledAll:,就会出现异常

例如,使用此代码:

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的绑定或其他什么?

这样的很长的整数通常意味着内存地址正在转换为整数。这通常是通过将对象传递给标量变量而导致的

在IB中,查看接口元素的
所选对象
绑定。在某个时刻,您将一个对象交给off,以
取消行
而不是标量整数。

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


我在
NSTableView委托#tableViewSelectionDidChange
中调用
NSTableView#取消行
,这会触发对
tableViewSelectionDidChange
方法的另一个调用。在第二次调用中,
NSTableView#selectedRow
属性等于
-1
,这是传递给
取消行的无效值


为了避免这种情况,只需使用
selectedRow>=0
条件来包装
deselectRow
调用。

异常可能发生在某些代码对取消选择作出反应时……您是否有类似的代码?原因是什么?
 if(row != UINT64_MAX)