退出时保存当前状态,重新打开应用程序时自动重新加载 [英] Save the current status when quit, auto-reload when re-open the app
问题描述
我正在创建一个简单的应用程序,只需保存一个人的姓名和与此人相关的号码。我为这样的人创建了一个类:
I'm creating a simple app to simply save a person's name and a number associated with this person. I've created a class for person like this:
@interface Person : NSObject {
NSString *name;
NSInteger serialNumber;
}
在mainViewController中,我创建了一个输入文本字段来输入名称然后自动为该人分配一个号码,同时2 UILabel显示输入的名称和序列号。
In the mainViewController, I've created an input text field to enter the name and then automatically assign a number to the person, also 2 UILabel to show the inputted name and the serialNumber.
然而,在退出应用程序并重新打开后,所有标签清除。我要做的是保留这些变量,就像退出应用程序并在标签中显示一样。因此,我在app delegate中创建了2个变量,并尝试使用applicationWillTerminate:在app delegate中保存。在mainViewController中,我每次输入新名称后都会插入这些代码:
However, after quitting the app and re-open, all labels cleared. What I'm trying to do is to keep these variables as they were when quitting the app and display in the labels. Hence, I created 2 variables in the app delegate and tried to use applicationWillTerminate: in the app delegate to save . In the mainViewController I've inserted these codes after each time I typed in a new name:
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 (总是等于零)。
However, each time I typed a new name, the console showed a change in aPerson.serialNumber (which is in mainViewController) BUT not the appDelegate.lastPerson.serialNumber (which is always equal to zero).
代码有什么问题吗以上?
Is there anything wrong with the codes above?
推荐答案
使用 NSUserDefaults
轻松搞定,这里有一些代码可以帮到你开始:
Easy to do with NSUserDefaults
, here's some code to get you started:
- (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];
}
您可以在加载后检查其中任何一个字符串是否为零,这表示不存储的值然后您应该询问用户输入。
You can check if either of the strings are nil after loading which will indicate no stored value and you should then ask the user for input.
这篇关于退出时保存当前状态,重新打开应用程序时自动重新加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!