退出时保存当前状态,重新打开应用程序时自动重新加载

时间:2010-01-26 05:23:12

标签: ios objective-c iphone save

我正在创建一个简单的应用程序,只需保存一个人的姓名和与此人相关的号码。我为这样的人创建了一个课程:

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

在mainViewController中,我创建了一个输入文本字段来输入名称,然后自动为该人分配一个数字,还有2个UILabel来显示输入的名称和serialNumber。

然而,在退出应用程序并重新打开后,所有标签都已清除。我要做的是保留这些变量,就像退出应用程序并在标签中显示一样。因此,我在app delegate中创建了2个变量,并尝试使用applicationWillTerminate:在app delegate中保存。在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 个答案:

答案 0 :(得分:2)

您想要保存到NSUserDefaults(documentation)。请查看文档中的UserDefaults示例。

另请查看此问题:

How to register user defaults using NSUserDefaults without overwriting existing values?

答案 1 :(得分:2)

使用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];     
}

您可以检查加载后其中一个字符串是否为零,这表示没有存储的值,然后您应该要求用户输入。