Модель OO для nsxmlparser, когда делегат не является само - PullRequest
2 голосов
/ 06 июня 2010

Я борюсь с правильным дизайном для делегатов nsxmlparser.

Чтобы построить мою таблицу Foos, мне нужно сделать два типа вызовов веб-сервиса; один для всей таблицы и один для каждой строки. По сути, это главный запрос, а затем подробный запрос, за исключением того, что master-query-result-xml не возвращает достаточно информации, поэтому мне нужно запросить подробности для каждой строки. Я не имею дело с огромным количеством данных.

Во всяком случае - ранее я только что использовал

NSXMLParser *parser = [[NSXMLParser alloc]init];
[parser setDelegate:self];
[parser parse];

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

NSXMLParser *xp = [[NSXMLParser alloc]init];
MyMasterXMLParserDelegate *masterParserDelegate = [[MyMasterXMLParser]alloc]init];
[xp setDelegate:masterParserDelegate];
[xp parse];

В дополнение к тому, чтобы быть чище (по моему мнению, по крайней мере), это также означает, что каждая из реализаций -parser:didStartElement не тратит большую часть времени, пытаясь выяснить, какой xml они анализируют.

Так что теперь настоящая суть проблемы.

До того, как я разделил делегаты, у меня в главном классе, который также реализовывал методы делегатов, был NSMutableArray уровня класса, в который я просто помещал свои объекты objects-from-xml, когда -parser:didEndElement нашел ' конец каждой записи.

Теперь делегаты находятся в отдельных классах, я не могу понять, как получить параметр -parser: didEndElement в классе делегатов 'detail', который "возвращает" созданный объект вызывающему классу. По крайней мере, не в чистом виде. Я уверен, что смогу сделать это с помощью всяких неприятных методов класса.

Имеет ли вопрос смысл? Спасибо.

1 Ответ

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

Вопрос имеет смысл (как и разделение). Если я правильно понимаю, вы можете просто добавить свойство массива результатов в делегат синтаксического анализатора и прочитать это свойство из вызывающей программы после вызова [xp parse]?

...