2009-11-18 4 views
3

Как обновить NSTableView, когда его источник данных изменился?

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

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

- (NSInteger) numberOfRowsInTableView: (NSTableView *) aTableView { NSLog (@ "Calling numberOfRowsInTableView:% d", [todoList count]); возвращение [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 никогда не вызывает вызова вообще. Я предполагаю, что это потому, что Cocoa достаточно умен, чтобы не называть этот метод, когда рисовать нечего. Есть ли какой-то метод, который мне нужно вызвать, чтобы позволить представлению таблицы знать, что его источник данных изменился, и он должен перерисовать себя?

ответ

11
-[NSTableView reloadData]; 

См NSTableView API reference

+3

Я положил некоторые усилия, глядя, как раз в том месте. Я проверил руководство по программированию таблиц, ссылку на API NSTableViewDataSource и ссылку API NSTableViewDelegate. Кажется очевидным, когда вы знаете, где он уже есть. – jergason

+0

Достаточно честный. Удачи. –

+9

Не пытайтесь найти метод для конкретной задачи, когда она может быть распространена (божество по вашему выбору) знает только, сколько классов и протоколов. Это основные недостатки в документации. Чтобы на самом деле использовать незнакомый класс, вы должны прочитать документы для класса, все наследуемые классы и все протоколы, которые он наследует или использует. Чудесное развлечение. – TechZen

Смежные вопросы