在NSUserDefaults上更改语言后更新UI

时间:2014-02-21 07:29:41

标签: ios ios7 internationalization

我创建了一个语言选择屏幕,用户可以在其中选择应用程序的首选语言(iPad)。

我提交了这样的语言更改:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr"] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];

它完美无缺,除了它需要重新启动应用程序以便UI采用新的语言设置。根据Apple的文档:

  

要检测何时发生对首选项值的更改,应用程序也可以   注册通知NSUserDefaultsDidChangeNotification。该   共享NSUserDefaults对象将此通知发送到您的应用程序   每当它检测到对位于其中一个的偏好的改变时   持久域。您可以使用此通知进行回复   可能会影响您的用户界面的更改。例如,你可以   用它来检测用户首选语言的更改和更新   适当的应用内容。

所以看起来我需要注册NSUserDefaultsDidChangeNotification通知并更新我的UI。哪个班级听取通知?知道代码是什么样的吗?我的应用程序基于SKScenes和Sprite Kit对象,而不是xib和UIViewControllers。

1 个答案:

答案 0 :(得分:1)

观看NSNotificationCenter可以检测到所有通知:

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

- (void)userDefaultsChange:(NSNotification *)notification {
     //update UI to new language here
}    

创建课程时添加Addobserver,并记住在删除课程时必须将其删除。

[[NSNotificationCenter defaultCenter] removeObserver:self];