如何从 NSDictionary 中获取 NSArray 名称?
Posted
技术标签:
【中文标题】如何从 NSDictionary 中获取 NSArray 名称?【英文标题】:How to fetch a NSArray name from NSDictionary? 【发布时间】: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
将是一个包含 NSString
的 NSArray
。当您尝试将其视为字典时,您会遇到异常。对synchronize
的调用也是不必要的,尤其是在读取时。
【参考方案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];
【讨论】:
以上是关于如何从 NSDictionary 中获取 NSArray 名称?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NSdictionary 获取键值 - iphone sdk
使用 NSPredicate 根据 NSDictionary 键过滤 NSArray
从 NSDictionary 对象的 NSArray 中,如何获取唯一的 NSArray