Вот как я бы это реализовал. Я бы использовал ASIHTTPRequest для всех элементов подключения и не беспокоился об этой части. Он может очень легко обрабатывать все ваши загрузки данных асинхронно с помощью простых методов делегирования.
Я хотел бы иметь класс анализатора, который принимает URL-адрес, загружает его асинхронно, а затем анализирует возвращаемые данные. Затем он вернет массив проанализированных потомков с помощью метода делегата в табличное представление, которое отобразит потомков в данных XML.
Я бы создал подкласс UITableViewController, который будет обрабатывать любой тип URL / данных, в этом случае вам нужно будет написать только один класс табличного представления и не беспокоиться о том, как пользователь перемещается. Это сделает так, что вам нужно будет написать только один класс, и он будет обрабатывать любое количество разверток или комбинаций. Эта реализация сильно зависит от того, насколько сложны отдельные уровни XML-данных. Если они существенно отличаются, было бы более разумно иметь более чистый код в табличном представлении и не проверять if's
тип данных при создании ячейки.
Использование приложения в стиле навигации избавило бы от необходимости повторного анализа данных каждый раз, когда представление загружается, когда вы выводите представления из стека. В любое время, хотя это будет повторный анализ, но простой кэш массива urls-> может решить эту проблему, если это необходимо / желательно. Это потребует перезагрузки данных каждый раз при запуске приложения. Конечно, если вы получили предупреждение о глубине памяти на 3 уровня, это потребует повторного анализа или восстановления кэша на вашем пути к резервному копированию.
Если вам нужна система кеширования, я написал бы класс, который находится между контроллерами представления и анализатором URL, который проверяет хранилище, и, если он там, возвращает массив данных, в противном случае возвращает nil и получает его.
Лично я бы использовал NSXMLParser, поскольку это то, с чем я знаком. Возможно, вы захотите поместить элементы в оболочку класса, и в этом случае вам просто нужно будет проверить, какой тип элемента у вас есть на didStartElement
и установить enum для включения при создании. это довольно легко с nsxmlparser. Я не использовал никакого другого парсера для сравнения, но обнаружил, что отладка NSXMLParser была достаточно простой, а кодирование было простым, поэтому его было легко установить и запустить. Вот отличный сайт по всем различным xml-парсерам:
http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project
Итак, в заключение я хотел бы иметь подкласс NSObject, который принимает URL-адрес, загружает его через ASIHTTPRequest, анализирует его. Подкласс UITableviewController, который на касании ячейки выделяет тот же класс контроллера представления с новым URL-адресом и помещает его в стек навигации. Представление будет отображать экран загрузки, пока не будет возвращен массив, а затем просто перезагрузить данные. Надеюсь, это был бы СУХОЙ ПОЦЕЛУЙ.
Я бы разместил как можно больше кода в глобальных классах. Если при каждом извлечении данных есть только одна основная категория, как в
<items>
<stuff></stuff>
....
<stuff></stuff>
</items>
EOF
Я бы использовал массив для хранения всех значений. Если имеется более одного основного раздела, я бы сохранял все в словаре с родительским атрибутом в качестве ключа и значениями в массиве. Затем на табличном виде есть разные разделы на основе ключей словарей.
Надеюсь, это ответит на некоторые ваши вопросы. Я не уверен, какой низкий уровень вы искали. Я говорю о разработке довольно многих приложений и написании читателя RSS. Дайте мне знать, если вы хотите, чтобы я кое-что прояснил.