NSUserDefault和开关

时间:2013-01-23 15:35:51

标签: objective-c xcode switch-statement store nsuserdefaults

我使用NSUserDefaults开启/关闭开关,到目前为止还不错。它会记住下一个会话中的切换位置。

现在对我不理解的事情。 我在另一个视图中使用相同的开关(具有相同的名称),让我们说一个从第一个视图推入的翻转视图。如果我在第一个视图中更改了开关,它将在翻转视图中自动更改。 但反过来说,如果我在翻转视图中更改它,当我回去时它在第一个视图中没有改变。仅当我重新启动应用程序时,第一个视图也会更改。

如何解决此问题同时进行更改?或者刷新第一个视图而不需要重新启动。

2 个答案:

答案 0 :(得分:3)

您的第一个视图未刷新,因为它未再次初始化。如果使用ViewControllers,则可以在viewWillAppear中更新交换机(如果是isViewLoaded)。

答案 1 :(得分:2)

您应该观察对这些更改感兴趣的观看中的 NSUserDefaults更改。

您可以使用以下代码来观察更改:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(defaultsChanged:)  
               name:NSUserDefaultsDidChangeNotification
             object:nil];

并实施defaultsChanged方法:

- (void)defaultsChanged:(NSNotification *)notification
{
    NSUserDefaults *defaults = (NSUserDefaults *)[notification object];
    id value = [defaults objectForKey:@"keyOfDefaultThatChanged"];
    self.something = [(NSNumber *)value intValue];    // For example.
}

请勿忘记在视图关闭时移除观察者(可能在dealloc中):

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center removeObserver:self];