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

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

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

在mainViewController中,我创build了一个input文本字段来input名称,然后自动给这个人分配一个数字,还有2个UILabel来显示input的名字和serialNumber。

但是,退出应用程序并重新打开后,所有标签都被清除。 我想要做的是保持这些variables,因为他们退出应用程序,并显示在标签。 因此,我在应用程序委托中创build了2个variables,并尝试使用applicationWillTerminate:在应用程序委托中进行保存。 在mainViewController中,我在每次input新名称后都插入了这些代码:

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

然而,每次我input一个新的名字, 控制台显示aPerson.serialNumber(这是在mainViewController),但不是appDelegate.lastPerson.serialNumber (它总是等于零)的变化。

上面的代码有什么问题吗?

容易做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]; } 

您可以检查任一个string是否为零后加载,这将表明没有存储的价值,然后你应该要求用户input。

你想保存到NSUserDefaults( 文档 )。 查看文档中的UserDefaults示例。

另外看看这个问题:

如何注册用户默认使用NSUserDefaults而不覆盖现有的值?