Решение для разработки приложений для iPhone? - PullRequest
0 голосов
/ 25 февраля 2010

Я пишу простое приложение, которое следует шаблону проектирования MVC. В проекте Xcode у меня есть три бита:

  1. AppDelegate
  2. ViewController
  3. DataModel

Объект DataModel содержит все данные для приложения, и я хочу убедиться, что они сохраняются при выходе из приложения и перезагружаются при запуске приложения.

Я не уверен, что это правильный подход, я адаптировал свою DataModel к NSCoding и добавил методы encodeWithCoder: и initWithCoder:. Я объявил мою DataModel в моем viewController как:

FlowerStore *flowerStore = [[FlowerStore alloc] init];

Насколько я понимаю, мне нужно сохранить и загрузить, используя методы AppDelegate, перечисленные ниже:

-(void)applicationDidFinishLaunching:(UIApplication *)application { // LOAD
-(void)applicationWillTerminate:(UIApplication *)application { // SAVE

Может ли кто-нибудь указать мне правильное направление, как я должен это делать? Все примеры, которые я могу найти, заархивируют (или разархивируют) данные непосредственно внутри соответствующего объекта (см. Ниже), где мне нужно выполнить загрузку и сохранение при запуске / выходе из приложения?

-(void)encodeWithCoder:(NSCoder *)encoder {
-(id)initWithCoder:(NSCoder *)decoder {

Любая помощь / информация очень ценится.

EDIT_001:

Я только что проверил в книге «Начало разработки для iPhone3», где есть раздел о достижении «Глава 11 Постоянство данных», и они делают что-то, что, как я думал, было бы плохим дизайном. В книге они соответствуют своей модели данных [NSCoding] и реализуют методы кодирования / декодирования. Затем они используют viewDidLoad: и applicationWillTerminate: в своем viewController для достижения / достижения в соответствующее время. Что я нахожу плохим в том, что они получают данные из UITextFields? У меня есть данные, которые я хочу сохранить, которые не представлены в пользовательском интерфейсе, поэтому в моем случае это не сработает. Кроме того, не следует ли вам архивировать / отключать доступ от dataModel, не глядя на представление через элементы управления пользовательского интерфейса?

EDIT_002:

Подойдя ближе, теперь похоже, что вы делаете следующее: (оба в viewController)

-(void)viewDidLoad { // LOAD
-(void)applicationWillTerminate:(NSNotification *)notification { // SAVE

ПРИМЕЧАНИЕ: что applicationWillTerminate использует NSNotification, а не UIApplication, плюс вам также необходимо добавить следующий код в конец viewDidLoad.

UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationWillTerminate:)
                                             name:UIApplicationWillTerminateNotification 
                                           object:app];

1036 * Гэри *

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Я считаю это вопросом предпочтения. В какой-то момент вам нужно вызвать методы модели для сохранения / загрузки, для которых вы нашли пару решений. В проекте, который я сейчас создаю, я собираюсь загружать / сохранять определенные данные только тогда, когда пользователь входит / выходит из «предметной» области. Если он будет слишком медленным, я, вероятно, выполню загрузку некоторых нужных мне частей данных, используя отдельный поток, вызываемый в «applicationDidFinishLaunching». Затем я проверю завершение потока, когда они нажмут кнопку / выбор таблицы.

Лично я бы подумал о том, чтобы создать методы загрузки / сохранения данных «обертки», чтобы скрыть большинство переменных модели (внутренних компонентов) и сложности, а затем сделать так, чтобы эти обертки просто возвращали успех / неудачу и, возможно, ptr данных.

0 голосов
/ 25 февраля 2010

Да, applicationDidFinishLaunching: и applicationWillTerminate: хорошие места для загрузки / сохранения ваших постоянных данных.

Если у вас много данных для загрузки и вас беспокоит медленное время загрузки приложения, вы можете рассмотреть более сложную стратегию загрузки вещей по требованию (в этот момент вы можете захотеть изучить использование CoreData). 1003 *

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