Question

Never touched json before. I'm trying to access some variables within the Wunderground weather API for Melbourne. For example, let's say I want to access the "wind_dir":"East" variable. This is my code thus far:

NSString *urlString = 
    [NSString stringWithFormat:
     @"http://api.wunderground.com/api/key/geolookup/conditions/forecast/q/-33.957550,151.230850.json"];

    NSLog(@"URL = %@", urlString);

    SBJsonParser *parser = [[SBJsonParser alloc] init];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

    NSArray *weatherInfo = [parser objectWithString:json_string error:nil];

    for (NSDictionary *weatherString in weatherInfo)
    {

        NSLog(@"some weather info = %@", [[[weatherString objectForKey:@"response"] objectForKey:@"current_observation"] objectForKey:@"wind_dir"]);

    }

My code reaches the for loop and crashes with this error: -[NSCFString objectForKey:]: unrecognized selector sent to instance.

I'm not 100% sure what's causing the crash, and whether my path to the "wind_dir" variable is correct, though they could well be the same problem.

Thanks in advance for any help.

Was it helpful?

Solution

either the "response" property or the "current_observation" propery is string and not dictionary.

the error you are getting is that you are trying to call "objectForKey" on a string.

after looking at the result of the API, it seems that you are not getting an array.

You should do something like this:

    NSDictionary *weatherInfo = [parser objectWithString:json_string error:nil];

    NSLog(@"some weather info = %@", [[weatherInfo objectForKey:@"current_observation"] objectForKey:@"wind_dir"]);

instead of your for statement.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top