我创建了一个语言选择屏幕,用户可以在其中选择应用程序的首选语言(iPad)。
我提交了这样的语言更改:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr"] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
它完美无缺,除了它需要重新启动应用程序以便UI采用新的语言设置。根据Apple的文档:
要检测何时发生对首选项值的更改,应用程序也可以 注册通知NSUserDefaultsDidChangeNotification。该 共享NSUserDefaults对象将此通知发送到您的应用程序 每当它检测到对位于其中一个的偏好的改变时 持久域。您可以使用此通知进行回复 可能会影响您的用户界面的更改。例如,你可以 用它来检测用户首选语言的更改和更新 适当的应用内容。
所以看起来我需要注册NSUserDefaultsDidChangeNotification通知并更新我的UI。哪个班级听取通知?知道代码是什么样的吗?我的应用程序基于SKScenes和Sprite Kit对象,而不是xib和UIViewControllers。
答案 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];