UIViewController как источник данных и делегат UITableView без соответствия протоколам? - PullRequest
2 голосов
/ 24 октября 2011

Я просматривал часть своего кода и внезапно понял, что UIViewController, который имеет UITableView и является datasource и delegate этого UITableView, не объявляет протоколы <UITableViewDataSource, UITableViewDelegate>, а простоимеет методы, но никогда не объявляет протоколы.

Как это вообще работает? Согласно документации:

dataSource
The object that acts as the data source of the receiving table view.
@property(nonatomic, assign) id<UITableViewDataSource> dataSource
Discussion
The data source must adopt the UITableViewDataSource protocol. The data source is not retained.
delegate
The object that acts as the delegate of the receiving table view.
@property(nonatomic, assign) id<UITableViewDelegate> delegate
Discussion
The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained.

НЕТ предупреждений любого типа, у меня есть необходимые методыКонечно, чтобы сделать эту работу, и все работает отлично, почему это работает ?.Я не наследую от UITableViewController, который, как я знаю, объявляет эти протоколы, это просто подкласс UIViewController.

РЕДАКТИРОВАТЬ: Очевидно, IB не выдаст вам никаких предупреждений, если он там установлен, он делает какхотя ожидается кодЯ полагаю, что IB также должен предупредить вас, но, думаю, нет.

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Пока вы реализуете методы, помеченные как требуется UITableViewDelegate и UITableViewDataSource (как, например, none для UITableViewDelegate и два для UITableViewDataSource), все в порядке.TableView проверит с откликом ToSelector для дополнительных методов.Вы делаете свои соединения в конструкторе интерфейсов?Если вы делаете это в коде, должно появиться небольшое предупреждение о том, что ваш класс не соответствует UITableViewDataSource и UITableViewDelegate, но в конце дня, если ваш объект отвечает на требуемые сообщения во время выполнения, он будет работать.

1 голос
/ 24 октября 2011

Происходит следующее: табличное представление отправляет источник данных и делегирует сообщения назначенным объектам в надежде, что назначенные объекты соответствуют (не объявленным) протоколам.

Добавление UITableViewDataSource & UITableViewDelegate к вашему интерфейсу .h файлов дает вам проверку типов и соответствие (т.е. предупреждения, если вы не реализуете «обязательные» методы и т. Д.).

Возможно, есть более официальные описания того, что я только что обобщил выше.

b.t.w., Ваш вопрос - обманщик этого

UITableView без все еще работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...