OS X Table View: объясните пожалуйста, как оно работает?

Здравствуйте! Пару дней назад, для себя (появилось свободное время и я давно очень хотел попробовать) начал осваивать Objective-C и разработку приложений под OS X. Сам я давно занимаюсь веб-разработкой (сейчас в основном NodeJS/JS, раньше PHP/JS). С языком более-менее разобрался, даже больше нравится, чем JS, как-то все логично что-ли, код читается очень просто. А по началу действительно, как говорят многие, синтаксис вызывал вызывал рвотные позывы. Теперь пытаюсь понять архитектуру приложений и столкнулся вот с чем...

Стоит задача выводить данные в таблицу из NSMutableArray. Допустим, это просто числовые значения, в один столбец, в общем, примитивная задача.

С кодом разобрался, нашел в инете урок, как это сделать. Данные в массив записал, таблицу нарисовал, привязал Data source и Delegate к App Delegate. Запустил - все работает, табличка, а точнее столбец таблички заполняется значениями, согласно массиву.

Но встал вопрос, как это все работает? Кто вызывает вот эти методы numberOfRowsInTableView, tableView?

- (NSInteger) numberOfRowsInTableView: (NSTableView *) tableView 
    {
    return [self.list count];
}

- (id) tableView: (NSTableView *) tableView objectValueForTableColumn:(NSTableColumn *) tableColumn row: (NSInteger) row 
{
    return [self.list objectAtIndex:row];
}


И как быть, если таблиц у меня несколько? Почему я не могу сам взять массив и отправить его в заранее определенный в моем AppDelegate.h IBOutlet для таблицы, как я делаю это, скажем при изменении меню в трее, или текста кнопки?

Может есть какой-нибудь способ насоздавать программно массивы с NSCell и отправить их в нужные столбцы нужных таблиц?
  • Вопрос задан
  • 3518 просмотров
Решения вопроса 1
@utercast

Все весьма просто, хотя, и немного непонятно по началу как вы уже заметили.

MVC, который крутится вокруг объектной модели, построен на так называемых делегатах. Это такие интерфейсы которые помогают кидать данные куда надо и при том сохранять инкапсуляцию.

В общем методы которые вы имплементируете вызываются UITableView после отрисовки. Таблица для начала спрашивает своего делегата по "ДатаСурсу" - "а сколько, собственно, мне нарисовать ячеек?". А потом - "а какие, собственно, ячейки рисовать?". Ну и т.д.

С помощью делегатов одни объекты могут попросить другие объекты сделать что-то за них (делегировать). Так они защищаются от лишних лап внутри их самих. Это одна из причин по которой Objective-C называют "самым идеологически правильным ООЯП".

Надеюсь не запутал больше ;) Удачи вам в изучении!

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы