Лучшие практики для хранения данных iPhone Apps - PullRequest
2 голосов
/ 19 мая 2009

У меня есть приложение для iPhone, которое сильно зависит от TableViews и базы данных SQLite. Где вы храните данные? В моем случае я извлекаю данные из Интернета в App Delegate, сохраняю их в AppDelegate и регулярно сохраняю в БД.

rootviewcontroller - это табличное представление, которое читает объект appdelegate и заполняет себя.

Но, согласно Эвану Доллу (Стэнфордские лекции), кажется, что хранение данных в AppDelegate, по-видимому, плохой дизайн. Я не хочу в конечном итоге заплатить за это позже. Кто-нибудь может предложить лучшую альтернативу этому решению?

1 Ответ

7 голосов
/ 19 мая 2009

Для собственного использования я создал некую конструкцию MVC. У меня есть DataManager (одноэлементный), который содержит все необходимые данные (в основном представлены в моделях; простые NSObjects) в массивах или словарях.

Представления (Nib-файлы и ViewControllers) обращаются к DataManager для получения их данных с помощью функций get. Если данные уже присутствуют в DataManager, он возвращает данные (посредством уведомления). Если не; он переадресует вызов контроллеру, который затем получает его.

В этом контроллере я разделяю вызов в автономном / онлайн-режиме (возможно, это не важно для вас), когда в режиме онлайн вызов является запросом XML, а если в автономном режиме - вызовом базы данных SQLite.

Контроллер затем может установить данные в DataManager и отправить уведомление в представление.

Затем цикл начинается снова, где представление может получить доступ к данным через DataManager. Все это происходит при асинхронных вызовах, отсюда и уведомления (если бы я позволил DataManager или Controllers связываться с представлениями, это не было бы поточно-ориентированным).

Мой AppDelegate выполняет только самую первую инициализацию основного представления, контроллеров и DataManager, а затем они вступают во владение.

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

Я также разделил большинство типов функций на отдельные классы, такие как DataManager для данных, DownloadManager для асинхронизированных URL-запросов, анализатор XML, фабрика для построения моделей из NSDictionaries, DatabaseConnector и т. Д. И т. Д.

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