Ios 使用NSCoder在视图之间进行恢复(视图将显示/视图将消失)

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恢复每次都有效

我想知道在使用NSCoder使用UINavigationBar返回箭头来回导航到主菜单时,是否有办法保持用户输入。我目前正在使用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];    
    }

我已经为这个问题争论了好几天,但运气不好。任何帮助都将不胜感激!谢谢

不要使用coder在DecodeRestorableStates中设置UI对象:使用成员变量

然后在视图中将显示:如果已设置成员变量,则使用该变量,否则使用NSUserDefault中的值