我想知道在使用UINavigationBar
后退箭头来回导航到我的主菜单时是否有一种方法可以保持用户输入NSCoder
。我目前正在使用NSCoder
在后台/终止/重新启动期间维护此数据并NSUserDefaults
维护视图之间的数据,但是 和 的组合NSCoder
会NSUserDefaults
产生不可预测的结果。有时,两种类型的恢复都有效,但有时 BG/Term/RS 恢复不起作用,我说的是在我的设备上加载相同的相同代码。当NSUserDefaults
代码被注释掉时,BG/Term/RS 恢复每次都有效。
我想知道它是否可以NSCoder
用于我所有的恢复需求,如果可以,该代码会是什么样子。
这是我用于 BG/Term/RS 恢复的内容:
-(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"];
}
这是NSUserDefaults
我目前用来在菜单和主视图之间来回保存数据的代码,理想情况下我希望用NSCoder
解决方案替换它:
- (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];
}
我一直在与这个问题作斗争几天,但没有运气。任何帮助将不胜感激!谢谢。