2

我使用 NSUserDefaults 来保存开关,到目前为止它很好。它会记住下一个会话中的开关位置。

现在谈谈我不明白的事情。我在另一个视图中使用相同的开关(具有相同的名称),比如说从第一个视图推入的翻转视图。如果我在第一个视图中更改开关,它会在翻转视图中自动更改。但反过来说,如果我在翻转视图中更改它,当我返回时,它不会在第一个视图中更改。仅当我重新启动应用程序时,第一个视图也会更改。

我怎样才能解决这个同时改变?或者无需重新启动即可刷新第一个视图。

4

2 回答 2

3

您的第一个视图没有刷新,因为它没有再次初始化。如果您使用 ViewControllers,您可以在 viewWillAppear 中更新您的开关(如果 isViewLoaded)。

于 2013-01-23T15:39:42.857 回答
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];
于 2013-01-23T15:49:01.277 回答