Search code examples
iosobjective-cnsarraynsdictionarynsuserdefaults

How to fetch a NSArray name from NSDictionary?


This is how I set or create my NSDictionary object:

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

And, here I fetch and store into a local NSDictionary:

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

Here I want to check whether it is @"ar" or @"en" in a same method:

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];
}

Solution

  • Your userDefault structure is like as shown below:

     {
            "AppleLanguages" : [
                                "ar"
                                ]
        }
    

    So, your dictionary has AppleLanguages as key with an array of values as Value. when you access this key you get an Array not dictionary.

    So, Instead of

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

    Use

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

    and your If condition should be

    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];
    }