Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
590 views
in Technique[技术] by (71.8m points)

ios - 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;
}

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.

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);

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...