Делегирование и источник данных iOS

Я изучал делегирование и источники данных для программирования iOS, и мне нужно спросить, есть ли какие-либо различия, которые вам нужно сделать, когда вы создаете протокол источника данных, чем протокол делегата?

Также как я могу реализовать делегат для многих одинаковых объектов в одном делегате? Пример одного объекта с множеством уникальных настраиваемых предупреждений.

--Редактировать--

Пример для второй части:

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


person Lost Sorcerer    schedule 19.06.2012    source источник


Ответы (1)


Оба типа объектов ведут себя более или менее одинаково, вопрос в том, что они делают.

Объект типа делегата отвечает на действия, которые выполняет другой объект. Например, протокол UITableViewDelegate имеет такие методы, как didSelectRowAtIndexPath, для выполнения действий при выборе пользователем определенной строки в таблице.

Принимая во внимание, что объект типа источника данных передает данные другому объекту. Например, протокол UITableViewDataSource имеет такие методы, как cellForRowAtIndexPath и numberOfRowsInSection, определяющие, что должно отображаться в таблице.

Между ними нет жесткой разницы с точки зрения компиляции, это просто стиль кодирования, чтобы сделать то, что объекты делают, очень ясно для пользователя кода.

РЕДАКТИРОВАТЬ:

Чтобы ответить на ваш второй вопрос: если вы хотите, чтобы каждое оповещение реагировало по-разному, вам нужно будет написать другого делегата для каждого оповещения. Например, если одно из ваших предупреждений является предупреждением о подтверждении сохранения (возможно, вы собираетесь перезаписать файл, и оно всплывает, чтобы подтвердить, что пользователь хотел бы это сделать), у вас будет такой объект, как:

@interface SaveConfirmAlertDelegate : NSObject<UIAlertViewDelegate>
@end

И в @implementation для SaveConfirmAlertDelegate вы бы реализовали правильную функцию сохранения в зависимости от того, какую кнопку пользователь нажал в предупреждении.

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

Я надеюсь, что это проясняет ситуацию

person Dan F    schedule 19.06.2012
comment
Спасибо за объяснение моей первой проблемы. Я добавил пример к своему вопросу. - person Lost Sorcerer; 19.06.2012
comment
@RMDan Я добавил дополнительное пояснение к вашему второму вопросу, надеюсь, это немного прояснит ситуацию. - person Dan F; 19.06.2012
comment
Это имеет смысл. Мне нужно больше узнать о делегировании, но оно начинает обретать смысл. - person Lost Sorcerer; 19.06.2012