Iphone NSUserDafults在iOS7中工作不正常

Iphone NSUserDafults在iOS7中工作不正常,iphone,ios7,localization,nsuserdefaults,Iphone,Ios7,Localization,Nsuserdefaults,有时我在iOS7及以下版本中得到了错误的密钥,工作正常。这是Xcode6.0错误吗? 如何解决这个问题 提前感谢很好,Objective-C和Xcode-6与UserDefaults配合使用效果很好,根据我在使用NSUserDefaults时的经验,您需要非常小心保存和检索数据的方式: 我这样保存数据: +(NSString *)languageKey{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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


提前感谢

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

我这样保存数据:

+(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;
}
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"data" forKey:@"key"];
[prefs synchronize];
我检索的数据如下:

+(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;
}
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"data" forKey:@"key"];
[prefs synchronize];

当您检索数据时,我还看到一个[Default synchronize],我认为这是不必要的,因为您没有保存数据,祝您好运。

我们需要查看您将所有内容存储在用户默认值中的代码。老实说,用户默认值可能不是存储信息的正确位置,比如this@JoelBell:谢谢你的回复,我更新了代码