Сохранить текущее состояние при выходе, автоматическая перезагрузка при повторном открытии приложения - PullRequest
2 голосов
/ 26 января 2010

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

@interface Person : NSObject {
    NSString *name;
    NSInteger serialNumber;
}

В mainViewController я создал текстовое поле для ввода имени, а затем автоматически назначил ему номер, также 2 UILabel дляпоказать введенное имя и серийный номер.

Однако после выхода из приложения и повторного открытия все метки будут удалены.Я пытаюсь сохранить эти переменные такими, какими они были при выходе из приложения, и отображать их в ярлыках.Поэтому я создал две переменные в делегате приложения и попытался использовать applicationWillTerminate: в делегате приложения для сохранения.В mainViewController я вставил эти коды после каждого ввода нового имени:

NameAppDelegate *appDelegate = (NameAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.lastPerson.name = aPerson.name;
//currentPerson is an instance variable of the app delegate
appDelegate.lastPerson.serialNumber = aPerson.serialNumber;
NSLog(@"aPerson.serialNumber = %i", aPerson.serialNumber);
NSLog(@"appDelegate.lastPerson.serialNumber = %i", appDelegate.lastPerson.serialNumber);

Однако каждый раз, когда я набирал новое имя, консоль показывала изменение в aPerson.serialNumber(который находится в mainViewController) НО не appDelegate.lastPerson.serialNumber (который всегда равен нулю).

Что-то не так с кодами выше?

Ответы [ 2 ]

2 голосов
/ 26 января 2010

Легко сделать с NSUserDefaults, вот код, с которого можно начать:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    appDelegate.lastPerson.name = [defaults stringForKey:@"Name"];
    appDelegate.lastPerson.serial = [defaults stringForKey:@"Serial"];

    [window addSubview:[flipViewController view]];
    [window makeKeyAndVisible];
}

-(void)applicationWillTerminate:(UIApplication *)application {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setString:appDelegate.lastPerson.name forKey:@"Name"];
    [defaults setString:appDelegate.lastPerson.serial forKey:@"Serial"];
    [defaults synchronize];     
}

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

2 голосов
/ 26 января 2010

Вы хотите сохранить в NSUserDefaults ( документация ). Посмотрите на пример UserDefaults в документации.

Также проверьте этот вопрос:

Как зарегистрировать пользовательские значения по умолчанию, используя NSUserDefaults, не перезаписывая существующие значения?

...