Как мне обновить NSTableView, когда его источник данных изменился? - PullRequest
3 голосов
/ 18 ноября 2009

Я работаю вместе с Cocoa Programming For Mac OS X (отличная книга). Одно из упражнений, которое дает книга, - это создать простую программу. Пользовательский интерфейс имеет табличное представление, текстовое поле для ввода нового элемента и кнопку «Добавить» для добавления нового элемента в таблицу.

На заднем конце у меня есть контроллер, который является источником данных и делегатом для моего NSTableView. Контроллер также реализует метод IBAction, вызываемый кнопкой «Добавить». Он содержит NSMutableArray для хранения элементов списка дел. Когда кнопка нажата, метод действия запускается правильно, и новая строка добавляется в изменяемый массив. Тем не менее, мои методы источника данных не вызываются правильно. Вот они:

- (NSInteger) numberOfRowsInTableView: (NSTableView *) aTableView { NSLog (@ "Вызов numberOfRowsInTableView:% d", [счетчик списка задач]); return [todoList count]; }
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex {
    NSLog(@"Returning %@ to be displayed", [todoList objectAtIndex:rowIndex]);
    return [todoList objectAtIndex:rowIndex];
}

Вот руб. -numberOfRowsInTableView вызывается только при первом запуске приложения, а не каждый раз, когда я добавляю что-то новое в массив. -objectValueForTableColumn никогда не вызывается вообще. Я предполагаю, что это потому, что Какао достаточно умен, чтобы не вызывать этот метод, когда нечего рисовать. Есть ли какой-то метод, который мне нужно вызвать, чтобы табличное представление узнало, что его источник данных изменился, и он должен перерисовать себя?

1 Ответ

11 голосов
/ 18 ноября 2009
-[NSTableView reloadData];

См. NSTableView Справочник по API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...