Отправка информации обратно от делегата [iPhone] - PullRequest
0 голосов
/ 17 июня 2010

Я использую NSXMLParser в моем файле RootViewController.m.

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:response_data];
[xmlParser setDelegate:self];
[xmlParser parse];
[xmlParser release];

Я также реализую этот метод, чтобы добавить записи в словарь, определенный в RootViewController.m для дальнейшего использования:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict

Однако я хотел бы получить более одного XML-файла и делать разные вещи с его узлами;Похоже, мне нужно использовать внешние файлы в качестве делегатов.Мой вопрос:

Если у меня есть следующие файлы реализации (и их заголовочные файлы):

  • RootViewController.m
  • XMLDelegate1.m
  • XMLDelegate2.m

и установите для делегата i th NSXMLParser значение XMLDelegate i .m, как я могу заставить эти файлы возвращать NSDictionary, который я могузатем добавьте в NSDictionary, определенный в RootViewController.m?

Я думаю, есть два возможных ответа:

  1. Используйте метод, о котором я не знаю;или
  2. Используйте лучший рабочий процесс

Я подозреваю, что это 2, но надеюсь, что это 1.

Спасибо, Энди

ОБНОВЛЕНИЕ: Так что я нашел способ достижения цели, хотя я не уверен, что это самый хороший способ.По сути, я получаю от своего делегата обновление файла Plist и использую Центр уведомлений, чтобы узнать, когда это происходит.

Ответы [ 2 ]

1 голос
/ 18 июня 2010

Существует довольно хорошее обсуждение этой «проблемы» в Apple Event-Driven XML Programming Guide В разделе «Использование нескольких делегатов» затрагивается стратегия использования. Документ содержит листинг кода для класса Element, в котором живут «умные» алгоритмы. В примере кода автор предполагает, что читатель знает, что образец предназначен для класса Element, который имеет свойства parent, name, attribute, children и parser. Класс Element реализует протокол NSXMLParserDelegate. Класс Element также будет иметь свойство NSMutableString *content, которое обновляется в методе - (void)appendString:(NSString *)aString, который не включен в пример.

0 голосов
/ 17 июня 2010

Не пример кода, а шаблонный, если я понимаю ваш вопрос:

Вы можете просто определить класс, создать его экземпляры, создать соответствующие экземпляры синтаксического анализатора, а затем вручную настроить экземпляры синтаксического анализатора для использования экземпляров класса в качестве делегата ... добавить его DOM к известному глобальному массиву.

Это один из способов. программная настройка делегатов (без использования IB) звучит так, как вы хотите.

...