Как сохранить состояние приложения в какао

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


person Surjeet    schedule 26.08.2013    source источник


Ответы (2)


Вы можете сохранить состояние любым из доступных методов, например:

<сильный>я. NSUserDefaults

Пример:

//saving
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"testBool"];
//retrieving
[defaults boolForKey:@"testBool"];

II. Сериализация объекта состояния.

III. Сохранение в виде файла plist

Пример:

NSMutableDictionary *stateDictionary = [NSMutableDictionary dictionary];
//set state
...

//saving
[stateDictionary writeToFile:<filePath> atomically:YES];

//retrieve
stateDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:<filePath>]

IV. Использование sqlite или Core-Data

(Скорее всего, это не нужно, если только состояние вашего приложения не находится в какой-то объектно-реляционной модели)

ОБНОВЛЕНИЕ.
Чтобы сохранить состояние пользовательского интерфейса окон, ознакомьтесь с этим ссылка и под заголовком СОХРАНЕНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА.

person Rakesh    schedule 26.08.2013
comment
Можете ли вы объяснить, как использовать их для хранения фрейма элементов управления, который добавляется в NSWindow. и, пожалуйста, не говорите хранить кадр каждого элемента управления, потому что у меня есть много элементов управления в окне, и сохранение каждого кадра управления - очень большая задача. - person Surjeet; 26.08.2013
comment
К сожалению, NSWindow нельзя напрямую сериализовать или записать в файл. У вас может быть либо подкласс NSWindow, чтобы переопределить методы кодирования (см. ссылку для элемента списка ii), либо вы можете проверить ссылку, которую я предоставил в обновленном ответе. - person Rakesh; 27.08.2013

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
    //saveData
    return NSTerminateNow;
}

Если вы хотите сохранить позицию NSWindow, вы можете использовать [window saveFrameUsingName:@"myWindow"];
и использовать
[window setFrameAutosaveName:@"myWindow"]; при запуске приложения.

person Parag Bafna    schedule 26.08.2013
comment
я знаю этот метод, он вызывается во время закрытия приложения. Моя проблема в том, как сохранить состояние приложения (положение элемента управления пользовательского интерфейса). - person Surjeet; 26.08.2013
comment
сохранить позицию элемента управления пользовательского интерфейса в NSUserDefaults - person Parag Bafna; 26.08.2013
comment
Вы можете использовать saveFrameUsingName: для сохранения позиции NSWindow setFrameAutosaveName: - person Parag Bafna; 26.08.2013