пятница, 1 мая 2009 г.

1.05.09. Delegates and Data Sources

Data Sources

Делегаты обычно добавляются в классы графического интерфейса. Источники данных являются аналогами делегатов, но добавляются в классы представления (NSView), работающие с данными. Их задачами является предоставление данных таким классам, как NSView и обработка запросов от пользователя на изменение данных.

Источник данных должен становиться владельцем данных, которые он передает в элементы интерфейса пользователя. Однако, обычно владеет он ими не долго, пока данные отображаются.

Implementing a Delegate for a Custom Class

1. В h-файл добавляется объявление делегата:

- (id)delegate;
- (void)setDelegate:(id)newDelegate;

2. В m-файл добавляется реализация методов доступа. Хост-класс не должен становиться владельцем делегата. Владельцем должен быть клиент хост-класса.

- (id)delegate {
  return delegate;
}
 
- (void)setDelegate:(id)newDelegate {
  delegate = newDelegate;
}

3. Добавить формальный или неформальный (категория NSObject) протокол к хост-классу.

4. Перед обращением к методу делегата проверить, что он его реализует.

- (void)someMethod {
  if ( [delegate respondsToSelector:@selector(operationShouldProceed)] ) {
  if ( [delegate operationShouldProceed] ) {
  // do something appropriate
  }
  }
}

Комментариев нет:

Отправить комментарий