【问题标题】:How to fetch a NSArray name from NSDictionary?如何从 NSDictionary 中获取 NSArray 名称?
【发布时间】:2018-01-15 07:53:33
【问题描述】:

这就是我设置或创建我的 NSDictionary 对象的方式:

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setObject:[NSArray arrayWithObjects:@"ar", nil] forKey:@"AppleLanguages"];
[userDefault synchronize];

而且,我在这里获取并存储到本地 NSDictionary:

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSDictionary *dictLanguage = [userDefault objectForKey:@"AppleLanguages"];
[userDefault synchronize];

这里我想用同样的方法检查是@"ar"还是@"en":

if ([[[dictLanguage objectForKey:@"AppleLanguages"] isEqualToString:@"ar"]]) {
    strCategoryUrl = [NSString stringWithFormat:@"%@%@", ROOT_URL, API_PRODUCT_MAIN_AR];
}
else if ([[dictLanguage objectForKey:@"AppleLanguages"] isEqualToString:@"en"]) {
    strCategoryUrl = [NSString stringWithFormat:@"%@%@", ROOT_URL, API_PRODUCT_MAIN_EN];
}

【问题讨论】:

  • 您不能存储数组并取回字典。 dictLanguage 将是一个包含 NSStringNSArray。当您尝试将其视为字典时,您会遇到异常。对synchronize 的调用也是不必要的,尤其是在读取时。

标签: ios objective-c nsarray nsdictionary nsuserdefaults


【解决方案1】:

您的 userDefault 结构如下所示:

 {
        "AppleLanguages" : [
                            "ar"
                            ]
    }

因此,您的字典将 AppleLanguages 作为 key,将 值数组 作为 Value。当您访问此键时,您会得到一个数组而不是字典。

所以,而不是

NSDictionary *dictLanguage = [userDefault objectForKey:@"AppleLanguages"];

使用

NSArray *arrLanguage = [userDefault objectForKey:@"AppleLanguages"];

你的 If 条件应该是

if ([arrLanguage[0] isEqualToString:@"ar"]) {
    strCategoryUrl = [NSString stringWithFormat:@"%@%@", ROOT_URL, API_PRODUCT_MAIN_AR];
}
else if ([arrLanguage[0] isEqualToString:@"en"]) {
    strCategoryUrl = [NSString stringWithFormat:@"%@%@", ROOT_URL, API_PRODUCT_MAIN_EN];
}

【讨论】:

  • 非常感谢
【解决方案2】:

如果您存储了一个 NSArray ,那么您必须将其读取为 NSArray 而不是 NSDictionary 也使用此代码检查当前语言

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSArray *arrLang = [userDefault objectForKey:@"AppleLanguages"];

if ([arrLang[0] isEqualToString:@"ar"]) {
    strCategoryUrl = [NSString stringWithFormat:@"%@%@", ROOT_URL,    API_PRODUCT_MAIN_AR];
}
else if ([arrLang[0] isEqualToString:@"en"]) {
    strCategoryUrl = [NSString stringWithFormat:@"%@%@", ROOT_URL, API_PRODUCT_MAIN_EN];
}

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2015-10-25
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多