Ios 在NSUserDefaults上更改语言后更新UI

Ios 在NSUserDefaults上更改语言后更新UI,ios,ios7,internationalization,Ios,Ios7,Internationalization,我创建了一个语言选择屏幕,用户可以在其中选择应用程序(iPad)的首选语言 我承诺语言更改如下: [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr"] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize]; 它工作得很好,只是需要重新启动应用程序,UI才能采用新的语言设置。根据苹果的

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

我承诺语言更改如下:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr"] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
它工作得很好,只是需要重新启动应用程序,UI才能采用新的语言设置。根据苹果的文档:

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


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

通过观看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
}    
在创建类时添加观察者,记住在删除类时必须删除它

[[NSNotificationCenter defaultCenter] removeObserver:self];

你能解释一下你的答案吗。虽然他们被允许只提供代码而不解释自己的答案并不是很好的答案。顺便说一句,我对提问者有更多的理解,因为如果他们理解了,他们就不会提问。我添加了一些描述,我真的认为没有必要,但我解释了一点,如果他们理解他们在做什么,他们就不会问问题。因此,仅仅提供代码并不能告诉他们任何事情,也不能帮助他们学习。让我们这样说吧,如果你问了一个关于一些不起作用的代码的问题,你不理解它,我只是给了你一些代码,没有解释它,你会从中学习吗,即使你仍然不理解代码???谢谢@GrzegorzKrukowski。但是,如何根据新语言更新UI?我正在寻找comment://update UI to new language的实现,我希望使用新的语言设置重新绘制SKSpriteNodes和所有其他本地化对象(图像、字符串),这些对象使用initWithImageNamed或nslocalizedstring进行初始化。