Я пишу простое приложение, которое следует шаблону проектирования MVC. В проекте Xcode у меня есть три бита:
- AppDelegate
- ViewController
- 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 * Гэри *