Ищу совет для структуры приложения iPhone - PullRequest
1 голос
/ 28 июля 2010

Мне было поручено создать приложение для iPhone, которое будет использовать серию потоков REST API JSON из Twitter.

Я немного новичок в разработке для iPhone, но я создал несколько приложенийраньше, хотя ни один из них не требовал подключения к данным API.

Итак, скажем, у нас есть три представления в Интерфейсном Разработчике, которые управляются табулятором:

  • Feed
  • Подписчиков
  • Подписок

Каждое из этих представлений должно отображать канал JSON в виде таблицы.Данные должны быть загружены во время показа представления.

Также будет окно поиска, которое отправляет запрос в фид JSON API поиска Twitter и возвращает результаты в UITableView в другом представлении.

Я установил и импортировал библиотеку json-interface в свой проект.Я также успешно получил фид в строке NSString.

Но вот мои вопросы:

  • Как мне подготовить приложение для отправки запросов на несколько фидов JSON и отображениясоответствующие данные в разных таблицах на разных представлениях?Все учебники, которые я вижу, показывают только один JSON-запрос, отформатированный в одну таблицу в одном представлении.Например: http://iosdevelopertips.com/cocoa/json-framework-for-iphone-part-2.html

  • Как Interface Builder вписывается в это?Как я могу использовать таблицы, которые я вставил в мои представления в Интерфейсном Разработчике?

Ответы [ 2 ]

1 голос
/ 28 июля 2010

То, что я предлагаю ниже, может или не может быть немного больше, чем того требует ваша ситуация, но это всегда хорошая идея отделить данные и сети от ваших классов пользовательского интерфейса.

Вам следует создать слой модели, другими словами набор классов, которые отвечают только за получение данных с сервера и делают их доступными для остальной части приложения.Способ проектирования слоя модели похож на проектирование базы данных: подумайте о предметной области и о том, какой это наиболее удобный способ отображения.(В этом случае ваши классы моделей будут довольно близко следовать модели данных Twitter.) Также важно не слишком задумываться о том, как будет выглядеть интерфейс.Уровень модели должен быть как можно более независимым от пользовательского интерфейса, чтобы изменение пользовательского интерфейса не требовало изменений в классах модели.

Создайте объект базовой модели, который затем можно будет создать в подклассе для представления определенных типов данных.Эта базовая модель должна знать, как сделать вызов на сервер, и должна иметь состояние, показывающее, загружаются ли данные, завершены или загрузка была отменена.Классы пользовательского интерфейса, такие как представления и контроллеры, могут наблюдать это состояние и обновлять себя при его изменении.

Например, каждая ячейка табличного представления может иметь ссылку на объект модели и когда состояние модели изменяется на «загружен», ячейка будет получать некоторые строки и другие данные из модели и обновлять ее внешний вид.

Старайтесь не выполнять слишком много сетевых запросов одновременно.Вместо этого используйте очередь.Вам определенно следует использовать фантастическую библиотеку ASIHTTPRequest для работы в сети и организации очередей.Чтобы работать со слоем модели, как описано, вам также нужно понимать Наблюдение значения ключа .

Что касается вашего второго вопроса, он очень общий.Вы используете таблицы, делая свой контроллер dataSource и delegate и реализуя протоколы UITableViewDelegate и UITableViewDataSource.

0 голосов
/ 28 июля 2010

Как мне подготовить приложение для отправки запросов на несколько каналов JSON и отображения соответствующих данных в разных таблицах в разных представлениях? ...

Каждый ViewController позаботится о своих собственных запросах JSON, таких как учебник.

Как Interface Builder вписывается в это? Как я могу использовать таблицы, которые я вставил в мои представления в Интерфейсном Разработчике?

Вы создаете IBOutlet для ваших табличных представлений в ваших ViewControllers. Например:

// FeedViewController.h
@interface FeedViewController : UIViewControllerUIViewController <UITableViewDelegate, UITableViewDataSource, FeedControllerDelegate> {
IBOutlet UITableView _feedTableView
}

В Интерфейсном Разработчике вы связываете свой TableView с переменной IBOutlet. Вы будете использовать эту переменную для взаимодействия с TableView из контроллера.

Будем весьма благодарны за любые учебные ссылки или соответствующий исходный код проекта!

Когда я начал похожий проект, я не нашел много хороших учебников. Для меня Tekpub был лучшим ресурсом для выяснения того, как отображать манипуляции с данными в приложении iPhone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...