2014-02-07 1 views
0

У меня есть три разных класса, один из которых - синтаксический анализ xml с определенного сайта, а два других будут получать информацию из класса, использующего методы протокола NSXMLParserDelegate. Мой вопрос: как я могу сказать классу, чтобы он запускал методы протокола из другого класса? Или запускайте каждый метод экземпляра или весь класс или что-то в этом роде.Выполнение методов протокола из другого класса - Objective-C

Любые предложения?

Редактировать: Я собираюсь разобрать xml-информацию с веб-сайта, когда некоторое определенное представление активно. Для этого у меня будет класс, на который я отправлю сообщение, и скажу ему, чтобы он запускал его методы из протокола XML-анализатора и отправлял значение, которое он получает, в существующее представление.

+0

Таким образом, эти два других классов будут * и * быть делегатом от первого? Звучит не так. – trojanfoe

+1

Я думаю, что вам не хватает базового понимания протоколов и делегатов. Не могли бы вы объяснить немного больше, что вы пытаетесь сделать? – Merlevede

+0

Хорошо, есть ли другой способ, который я мог бы приобрести? –

ответ

2

Существует два способа увидеть это.

Объект (A), имеющий указатель на делегат (B) (делегат является объектом, реализующим методы протокола), может вызывать методы протокола, просто вызывая их. Формируйте точку зрения делегата (B), вы не вызываете методы протокола, вы их IMPLEMENT, а какой-то другой объект (A) будет вызывать их, когда ему нужно сообщить вам о каком-либо событии или запросить некоторую информацию. Вот для чего предназначены протоколы.

Object (A) где-то объявляет делегат

id <someKindOfDelegate> delegate; 

и всякий раз, когда он хочет, он называет методы Протокола

if (self.delegate) 
    [self.delegate someMethod] 

(B) должен заявить о себе как реализатор протокола

@interface ObjectB <someKindOfDelegate> 

then (B) устанавливает себя как делегат экземпляра (A)

ObjectA *object = [[ObjectA alloc] init]; 
object.delegate = self; 

и, наконец, (B) реализует методы Протокола

- (void)someMethod { 
    // do something... I've been called! 
}