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

К числу основных классов Cocoa с источниками данных относятся UITableView, UlCollectionView, UlPickerView и UlPageViewController. В каждом отдельном случае источник данных должен формально соответствовать протоколу с обязательными методами.

Некоторым начинающим программировать в системе iOS непонятно, зачем вообще нужен источник данных. Почему для этого недостаточно табличных данных или хотя бы некоторой фиксированной структуры данных? Дело в том, что такая архитектура способна нарушить универсальность. В то же время применение отдельного источника данных позволяет отделить объект, отображающий данные, от объекта, управляющего данными, а также высвободить последний для хранения и получения этих данных каким угодно способом (см. описание шаблона “модель-представление-контролллер” в главе 13). Единственное требование к источнику данных состоит в том, что он должен быстро предоставлять информацию, поскольку она будет запрашиваться у него в реальном времени, когда ее потребуется отобразить.

Не совсем понятно и то, чем источник данных отличается от делегата. Однако это сделано только ради сохранения универсальности, хотя и не является обязательным требованием. На самом деле нет никаких причин для того, чтобы источник данных и делегат не должны быть одним и тем же объектом, и чаще всего они могут быть таковыми. Как правило, методы

источника данных и делегата настолько тесно взаимодействуют, что трудно даже уловить их различие.

В приведенном ниже примере реализуется представление типа UlPickerView, дающее пользователю возможность выбрать день недели по названию (на английском языке в григорианском календаре). Два первых метода являются методами источника данных из класса UlPickerView, а третий — метод делегата их того же класса UlPickerView. Все три метода служат для того, чтобы предоставить содержимое представления, в котором выбираются дни недели.

- (NSInteger) numberOfComponentsInPickerView:    (UlPickerView*) pickerView {

return 1;

- (NSInteger) pickerView:  (UlPickerView*)   pickerView

numberOfRowsInComponent: (NSInteger) component ( return 7;

}

- (NSString*) pickerView:(UlPickerView*(pickerView

titleForRow:(NSInteger)row forComponent:(NSInteger)component {

NSArray* arr = @[@"Sunday",

@"Monday",

@"Tuesday",

@"Wednesday",

@"Thursday",

@"Friday",

@"Saturday"];

return arr[row];

}


 

 

 

Добавить комментарий