То, что я предлагаю ниже, может или не может быть немного больше, чем того требует ваша ситуация, но это всегда хорошая идея отделить данные и сети от ваших классов пользовательского интерфейса.
Вам следует создать слой модели, другими словами набор классов, которые отвечают только за получение данных с сервера и делают их доступными для остальной части приложения.Способ проектирования слоя модели похож на проектирование базы данных: подумайте о предметной области и о том, какой это наиболее удобный способ отображения.(В этом случае ваши классы моделей будут довольно близко следовать модели данных Twitter.) Также важно не слишком задумываться о том, как будет выглядеть интерфейс.Уровень модели должен быть как можно более независимым от пользовательского интерфейса, чтобы изменение пользовательского интерфейса не требовало изменений в классах модели.
Создайте объект базовой модели, который затем можно будет создать в подклассе для представления определенных типов данных.Эта базовая модель должна знать, как сделать вызов на сервер, и должна иметь состояние, показывающее, загружаются ли данные, завершены или загрузка была отменена.Классы пользовательского интерфейса, такие как представления и контроллеры, могут наблюдать это состояние и обновлять себя при его изменении.
Например, каждая ячейка табличного представления может иметь ссылку на объект модели и когда состояние модели изменяется на «загружен», ячейка будет получать некоторые строки и другие данные из модели и обновлять ее внешний вид.
Старайтесь не выполнять слишком много сетевых запросов одновременно.Вместо этого используйте очередь.Вам определенно следует использовать фантастическую библиотеку ASIHTTPRequest для работы в сети и организации очередей.Чтобы работать со слоем модели, как описано, вам также нужно понимать Наблюдение значения ключа .
Что касается вашего второго вопроса, он очень общий.Вы используете таблицы, делая свой контроллер dataSource
и delegate
и реализуя протоколы UITableViewDelegate
и UITableViewDataSource
.