NSUserDefaults defaultUserDefaults setObject在defaultsChanged中崩溃

时间:2011-12-06 14:30:40

标签: iphone localization nsuserdefaults exc-bad-access

我碰到了一些我不理解的东西。我已在手机的设置菜单中为应用程序设置了语言选择。我有委托方法

- (void)defaultsChanged:(NSNotification *)notif 

在我的AppDelegate中。我阅读了所选语言的新参数,并尝试使用

更改语言
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];

不幸的是,这一行总是给我一个EXC_BAD_ACCESS错误。我不明白为什么。

我在StackOverflow上尝试了不同的方法来在运行时更改Localization,但它们仅适用于应用程序中的文本。我还有本地化的图像,只有在NSUserDefaults中更改语言时才会更新。

我需要一些建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

在我看来,在defaultsChanged处理程序中更改NSUserDefaults并不是一个好主意。根据你自己的评论,它会导致递归。

如果需要更改defaultsChanged中的NSUserDefaults,解决方法是添加一个布尔标志,表示您正在进行更改,以便在调用时知道不执行任何操作以回应你自己的变化。

对于您的州,您可能需要与NSUserDefaults不同的存储方法,例如plist。我知道NSUserDefaults使用起来非常方便,这是人们使用(有时是滥用)它的各种状态的主要原因,这种状态实际上不是用户偏好,但它可能会因为所有的钟声和口哨而引起问题附带,例如对NSUserDefaultsDidChangeNotification观察员的支持。