Я работаю вместе с 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
никогда не вызывается вообще. Я предполагаю, что это потому, что Какао достаточно умен, чтобы не вызывать этот метод, когда нечего рисовать. Есть ли какой-то метод, который мне нужно вызвать, чтобы табличное представление узнало, что его источник данных изменился, и он должен перерисовать себя?