我想知道使用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];
}
我一直在与这个问题作斗争几天没有运气。任何帮助将不胜感激!谢谢。
答案 0 :(得分:0)
而不是在decodeRestorableStateWithCoder中设置UI对象:使用成员变量。
然后在viewWillAppear中:使用成员变量(如果已设置),否则使用NSUserDefault中的值。