我使用 NSUserDefaults 来保存开关,到目前为止它很好。它会记住下一个会话中的开关位置。
现在谈谈我不明白的事情。我在另一个视图中使用相同的开关(具有相同的名称),比如说从第一个视图推入的翻转视图。如果我在第一个视图中更改开关,它会在翻转视图中自动更改。但反过来说,如果我在翻转视图中更改它,当我返回时,它不会在第一个视图中更改。仅当我重新启动应用程序时,第一个视图也会更改。
我怎样才能解决这个同时改变?或者无需重新启动即可刷新第一个视图。
我使用 NSUserDefaults 来保存开关,到目前为止它很好。它会记住下一个会话中的开关位置。
现在谈谈我不明白的事情。我在另一个视图中使用相同的开关(具有相同的名称),比如说从第一个视图推入的翻转视图。如果我在第一个视图中更改开关,它会在翻转视图中自动更改。但反过来说,如果我在翻转视图中更改它,当我返回时,它不会在第一个视图中更改。仅当我重新启动应用程序时,第一个视图也会更改。
我怎样才能解决这个同时改变?或者无需重新启动即可刷新第一个视图。
您的第一个视图没有刷新,因为它没有再次初始化。如果您使用 ViewControllers,您可以在 viewWillAppear 中更新您的开关(如果 isViewLoaded)。
您应该观察 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];