我已经设置了状态恢复,以便我的应用程序在后台/终止/重启时保留用户输入,按钮状态等。我正在保存它们中的一堆,所以我只会在viewcontroller.m文件中包含部分clode:
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
// start level text
[coder encodeObject:_startLevel.text forKey:@"startText"];
// stop level text
[coder encodeObject:_stopLevel.text forKey:@"stopText"];
}
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
// start level text
_startLevel.text = [coder decodeObjectForKey:@"startText"];
// stop level text
_stopLevel.text = [coder decodeObjectForKey:@"stopText"];
}
这与我在BG / T / Restart上保存的所有用户输入完美配合。
我还设置了NSUserDefaults,以便在我的主菜单和此视图之间来回切换时保留所有相同字段的用户输入数据。
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// start level
[[NSUserDefaults standardUserDefaults] setObject:_startLevel.text forKey:@"startLevelRestore"];
// stop level
[[NSUserDefaults standardUserDefaults] setObject:_stopLevel.text forKey:@"stopLevelRestore"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// start level
[_startLevel setText:[[NSUserDefaults standardUserDefaults objectForKey:@"startLevelRestore"]];
// stop Level
[_stopLevel setText:[[NSUserDefaults standardUserDefaults] objectForKey:@"stopLevelRestore"]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
这也有效。用户输入在我的菜单视图和此viewcontroller之间来回传递。
不幸的是,以这种方式使用NSUserDefaults似乎会覆盖viewDidLoad,我一直用它来设置此视图的初始状态,这在每次安装时首次启动应用程序时都很好。我的按钮没有设置在正确的状态,我的标签的占位符也没有出现。
所以我发现this great solution here on StackOverflow显示了如何使用属性列表为NSUserDefaults设置初始值。我创建了PList,并将此代码放在我的appdelegate.m文件中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"];
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];
return YES;
}
这确实将我的用户输入正确地设置为他们想要的状态,但不幸的是,它在后台/终止/重启期间杀死了我的状态恢复功能。基本上,在此过程中,我的所有初始设置都会刷新到其初始状态 - 文本字段已清除,按钮重新设置为其初始启用设置等。
我一直试图在没有运气的情况下整夜搞清楚这一点,而且我觉得有人比我更熟练的人会有一个我很难看到的非常简单的修复。我感谢任何帮助。如果我可以提供更多信息,请提供建议,我将为此OP添加代码。
感谢!!!