Редактировать
В комментариях к этому ответу довольно долгая дискуссия, которая уточнила исходный вопрос.Я опубликую основные моменты здесь, чтобы помочь другим, у кого могут быть похожие вопросы.
Это сводилось к путанице между двумя методами,
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
Первый метод - это метод экземпляраUITableView
, который возвращает UITableViewCell
для заданного пути индекса.Этот метод вызывается для объекта табличного представления.
Второй метод представляет собой метод источника данных, объявленный в протоколе UITableViewDataSource
, который запрашивает UITableViewCell
для данного пути индекса.
Важным отличием является то, что первый вызывается в экземпляре табличного представления любым классом, которому может потребоваться ссылка на ячейку таблицы, а второй вызывается экземпляром табличного представления вкласс источника данных, который запрашивает ячейку для отображения по заданному пути индекса.
Надеюсь, это поможет.
Большинство протоколов делегатов / источников данных в Cocoa / Cocoa Touch следуют этому шаблону.Это способ сказать что-то вроде «это табличное представление хочет эти данные».
Рассмотрим что-то вроде объекта текстового поля.У вас может быть интерфейс со многими объектами текстового поля, которые все сообщают одному и тому же делегату, чтобы определить их поведение для определенных действий.Передавая делегату в качестве аргумента в методе, делегат знает, какое текстовое поле вызывает метод.
Я не уверен, что полностью понимаю, о чем вы спрашиваете, но именно так объектысообщить своим делегатам / источникам данных, какой именно объект отправляет метод.В случае UITableView это менее очевидно, потому что часто в контроллере табличного представления есть только одно табличное представление, но приведенный мною пример текстового поля должен обрисовать этот факт.