【问题标题】:Using NSCoder for restoration between views (viewWillAppear / viewWillDisappear)使用 NSCoder 进行视图之间的恢复 (viewWillAppear / viewWillDisappear)
【发布时间】:2014-02-16 07:24:05
【问题描述】:

我想知道在使用UINavigationBar 后退箭头和NSCoder 来回导航到我的主菜单时,是否有一种方法可以保持用户输入。我目前使用NSCoder 在后台/终止/重新启动期间维护此数据,并使用NSUserDefaults 维护视图之间的数据,但NSCoderNSUserDefaults 的组合会产生不可预测的结果。有时,两种类型的恢复都有效,但有时 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];    
    }

我已经与这个问题斗争了几天,但没有运气。任何帮助将不胜感激!谢谢。

【问题讨论】:

    标签: ios objective-c nscoding viewwillappear state-restoration


    【解决方案1】:

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

    然后在 viewWillAppear 中:如果已设置成员变量,则使用它,否则使用来自 NSUserDefault 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2020-01-04
      • 2014-03-21
      相关资源
      最近更新 更多