NSUserDefaults 在 iOS 7 中无法正常工作

Posted

技术标签:

【中文标题】NSUserDefaults 在 iOS 7 中无法正常工作【英文标题】:NSUserDafults not working properly in iOS7 【发布时间】:2014-11-11 22:15:00 【问题描述】:
+(NSString *)languageKey

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSArray *languages = [defaults objectForKey:@"AppleLanguages"];


    NSString *lang = [languages objectAtIndex:0];    

    if([lang isEqualToString:@"en"])
      return @"en";
    else if([lang isEqualToString:@"ar"])
      return @"ar";

    return @"en";    



+(NSString *)localizedStringForKey:(NSString *)key

    NSString *path;
    if([[self languageKey] isEqualToString:@"en"])
        path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
    else if([[self languageKey] isEqualToString:@"ar"])
        path = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"];

    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];

    return str;

有时我在 ios7 及以下版本中得到错误的密钥,工作正常。这是 Xcode6.0 的错误吗? 如何摆脱这个问题

提前谢谢

【问题讨论】:

我们需要查看将所有内容存储在用户默认值中的代码。不过老实说,用户默认设置可能不是存储此类信息的正确位置 @JoelBell:感谢您的回复,我更新了代码 【参考方案1】:

Objective-C 和 Xcode-6 与 UserDefaults 配合得很好,根据我使用 NSUserDefaults 的经验,您需要非常小心保存和检索数据的方式:

我这样保存数据:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"data" forKey:@"key"];
[prefs synchronize];

我这样检索数据:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *theString = [prefs stringForKey:@"key"];

当您检索数据时,我还看到 [默认同步],我认为这不是必需的,因为您没有保存数据,祝您好运。

【讨论】:

以上是关于NSUserDefaults 在 iOS 7 中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

无法保存到 iOS 7.0.2 上的 NSUserDefaults

如何使用 NSUserDefaults 存储和加载 BOOL 数组或 int 数组? (IOS 7)

为啥在 iOS 中使用 NSUserDefaults?

ios数据永久存储之----NSUserDefaults

你可以在 NSUserDefaults 中保存 Parse 信息吗? (IOS)

在 iOS 上存储身份验证令牌 - NSUserDefaults 与钥匙串?