我正在创建一个简单的应用程序来简单地保存一个人的姓名和与此人关联的号码。我为这样的人创建了一个类:
@interface Person : NSObject {
NSString *name;
NSInteger serialNumber;
}
在 mainViewController 中,我创建了一个输入文本字段来输入姓名,然后自动为该人分配一个数字,还有 2 个 UILabel 来显示输入的姓名和序列号。
但是,退出应用程序并重新打开后,所有标签均已清除。我要做的是保持这些变量在退出应用程序时保持原样并显示在标签中。因此,我在应用程序委托(delegate)中创建了 2 个变量并尝试在应用程序委托(delegate)中使用 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 却没有变化(它始终为零)。
上面的代码有什么问题吗?
使用 NSUserDefaults
很容易,这里有一些代码可以帮助您入门:
- (void)applicationDidFinishLaunchingUIApplication *)application {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
appDelegate.lastPerson.name = [defaults stringForKey"Name"];
appDelegate.lastPerson.serial = [defaults stringForKey"Serial"];
[window addSubview:[flipViewController view]];
[window makeKeyAndVisible];
}
-(void)applicationWillTerminateUIApplication *)application {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setString:appDelegate.lastPerson.name forKey"Name"];
[defaults setString:appDelegate.lastPerson.serial forKey"Serial"];
[defaults synchronize];
}
您可以在加载后检查任何一个字符串是否为 nil,这表明没有存储值,然后您应该要求用户输入。
关于ios - 退出时保存当前状态,重新打开应用时自动重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2137644/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |