Исключение при отмене выбора строки NSTableView - PullRequest
3 голосов
/ 05 сентября 2011

Я немного растерялся с этим ... Кажется, я не могу понять, почему я не могу отменить выбор строк из моего NSTableView. Я разрешил пустое выделение в Интерфейсном Разработчике, но как только я вызываю 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 голосов
/ 04 июля 2014

моё решение (настолько грубое, я знаю)

 if(row != UINT64_MAX)
0 голосов
/ 27 января 2019

Я звонил NSTableView#deselectRow внутри NSTableViewDelegate#tableViewSelectionDidChange, что вызывает другой вызов метода tableViewSelectionDidChange. Во втором вызове свойство NSTableView#selectedRow равно -1, что является недопустимым значением для передачи deselectRow.

Чтобы избежать этого, просто оберните вызов deselectRow условием selectedRow >= 0.

0 голосов
/ 06 сентября 2011

Очень длинное целое число, как это обычно означает, что адрес памяти переводится в целое число. Это, в свою очередь, обычно вызывается передачей объекта в скалярную переменную.

В IB посмотрите на привязки selected object для элементов интерфейса. В какой-то момент вы переводите объект в deselectRow вместо скалярного целого числа.

...