2014-02-21 36 views
1

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

我犯了语言的变化是这样的:

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

它完美,但它需要的应用程序重新启动的UI采取新的语言设置。根据苹果的文档:

要检测什么时候改变偏好值出现,应用程序也可以 注册通知NSUserDefaultsDidChangeNotification。只要它检测到位于 持久域之一中的首选项的更改,共享NSUserDefaults对象就会将此通知发送到您的应用程序 。您可以使用此通知来响应可能影响您用户界面的 更改。例如,您可以使用 来检测用户首选语言的更改,并适当地更新您的应用内容 。

所以它看起来像我需要注册通知NSUserDefaultsDidChangeNotification并更新我的用户界面。哪个班级听取通知?任何想法代码的样子?我的应用程序基于SKScenes和Sprite Kit对象,而不是xib和UIViewControllers。

回答

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]; 
+0

请您解释一下您的答案。虽然他们被允许只提供代码但不解释自己的答案不是很好的答案。顺便说一下,我对那些问过的人更了解,因为如果他们明白他们不会问。 – Popeye

+0

我添加了一些描述,我并不认为这是必要的,但我解释了一下 –

+0

如果他们明白他们在做什么,那么他们就不会问这个问题。所以只是提供代码并没有告诉他们任何东西,也没有帮助他们学习。让我们这样说,如果你问了一些关于某些代码不工作的问题,而你不明白这一点,我只是给了你一些代码,并没有解释它会从中学到什么,即使你还没有理解代码? – Popeye