Как обновить 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 достаточно умен, чтобы не называть этот метод, когда рисовать нечего. Есть ли какой-то метод, который мне нужно вызвать, чтобы позволить представлению таблицы знать, что его источник данных изменился, и он должен перерисовать себя?
Я положил некоторые усилия, глядя, как раз в том месте. Я проверил руководство по программированию таблиц, ссылку на API NSTableViewDataSource и ссылку API NSTableViewDelegate. Кажется очевидным, когда вы знаете, где он уже есть. – jergason
Достаточно честный. Удачи. –
Не пытайтесь найти метод для конкретной задачи, когда она может быть распространена (божество по вашему выбору) знает только, сколько классов и протоколов. Это основные недостатки в документации. Чтобы на самом деле использовать незнакомый класс, вы должны прочитать документы для класса, все наследуемые классы и все протоколы, которые он наследует или использует. Чудесное развлечение. – TechZen