- (void)defaultsChanged:(NSNotification *)notif
在我的AppDelegate中。我阅读了所选语言的新参数,并尝试使用
更改语言[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
不幸的是,这一行总是给我一个EXC_BAD_ACCESS错误。我不明白为什么。
我在StackOverflow上尝试了不同的方法来在运行时更改Localization,但它们仅适用于应用程序中的文本。我还有本地化的图像,只有在NSUserDefaults中更改语言时才会更新。
我需要一些建议。
谢谢!
答案 0 :(得分:0)
在我看来,在defaultsChanged处理程序中更改NSUserDefaults并不是一个好主意。根据你自己的评论,它会导致递归。
如果做需要更改defaultsChanged中的NSUserDefaults,解决方法是添加一个布尔标志,表示您正在进行更改,以便在调用时知道不执行任何操作以回应你自己的变化。
对于您的州,您可能需要与NSUserDefaults不同的存储方法,例如plist。我知道NSUserDefaults使用起来非常方便,这是人们使用(有时是滥用)它的各种状态的主要原因,这种状态实际上不是用户偏好,但它可能会因为所有的钟声和口哨而引起问题附带,例如对NSUserDefaultsDidChangeNotification
观察员的支持。