Ios 使用NSCoder在视图之间进行恢复(视图将显示/视图将消失)
我想知道在使用NSCoder使用UINavigationBar返回箭头来回导航到主菜单时,是否有办法保持用户输入。我目前正在使用NSCoder在后台/终止/重新启动期间维护此数据,并使用NSUserDefaults在视图之间维护数据,但NSCoder和NSUserDefaults的组合会产生不可预测的结果。有时,这两种类型的恢复都可以工作,但有时BG/Term/RS恢复不起作用,我说的是在我的设备上加载相同的代码。当NSUserDefaults代码被注释掉时,BG/Term/RS恢复每次都有效 我想知道是否有可能使用NSCoder来满足我的所有恢复需求,如果有,代码会是什么样子 这是我用于BG/Term/RS恢复的内容:Ios 使用NSCoder在视图之间进行恢复(视图将显示/视图将消失),ios,objective-c,nscoding,viewwillappear,state-restoration,Ios,Objective C,Nscoding,Viewwillappear,State Restoration,我想知道在使用NSCoder使用UINavigationBar返回箭头来回导航到主菜单时,是否有办法保持用户输入。我目前正在使用NSCoder在后台/终止/重新启动期间维护此数据,并使用NSUserDefaults在视图之间维护数据,但NSCoder和NSUserDefaults的组合会产生不可预测的结果。有时,这两种类型的恢复都可以工作,但有时BG/Term/RS恢复不起作用,我说的是在我的设备上加载相同的代码。当NSUserDefaults代码被注释掉时,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];
}
我已经为这个问题争论了好几天,但运气不好。任何帮助都将不胜感激!谢谢 不要使用coder在DecodeRestorableStates中设置UI对象:使用成员变量 然后在视图中将显示:如果已设置成员变量,则使用该变量,否则使用NSUserDefault中的值