Json – [NSCFString objectForKey:]: unrecognized selector sent to instance

ios4jsonobjective c

In this code:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {      

//---initialize the array--- 
listOfJMovies = [[NSMutableArray alloc] init];
listOfJMoviePosters = [[NSMutableArray alloc] init];
tmdbMovies = [[NSArray alloc] init];
posters = [[NSArray alloc] init];
thumbs = [[NSArray alloc] init];

//---set the title--- 
self.navigationItem.title = @"Movies";

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

//NSLog(responseString);

SBJsonParser *json = [[SBJsonParser new] autorelease];
tmdbMovies = [json objectWithString:responseString error:nil];

for (id movie in tmdbMovies) {
    [listOfJMovies addObject:[movie objectForKey:@"name"]];
    NSLog(@"Name: %@", [movie objectForKey:@"name"]);
    //[listOfJMoviePosters addObject:[obj objectForKey:@"posters"]];
    //NSLog(@"%@", [obj objectForKey:@"posters"]);

    posters = [movie objectForKey:@"posters"];

    for (id image in posters) {
        NSLog(@"image: %@", [image objectForKey:@"image"]);
        thumbs = [image objectForKey:@"image"];

        for (id url in thumbs) {


            NSLog(@"Size: %@", [url objectForKey:@"size"]);

            //NSLog(@"blah");
            //[listOfJMoviePosters addObject:[url objectForKey:@"size"]];

        }



    }

}


[[self tableView] reloadData];

[responseString release];
[connection release];
[responseData release];


}

This line: NSLog(@"Size: %@", [url objectForKey:@"size"]);

Is causing the app to crash and throw the following error:

2010-12-30 00:33:29.730 FlixIt[33132:207] -[NSCFString objectForKey:]: unrecognized selector sent to instance 0x4e50f00
2010-12-30 00:33:29.732 FlixIt[33132:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x4e50f00'

Here is the JSON: http://api.themoviedb.org/2.1/Movie.browse/en-US/json/e5084159b962a8f0c39096f379a1363c?order_by=rating&order=desc&genres=18&min_votes=5&page=1&per_page=10

Best Answer

From looking into the data structure, it seems to me that you have one extra loop. In the "posters" loop try:

for (id image in posters) {
    NSLog(@"image: %@", [image objectForKey:@"image"]);
    thumbs = [image objectForKey:@"image"];


    NSLog(@"Size: %@", [thumbs objectForKey:@"size"]);

}

image is a dictionary and the key "size" has NSString type.

Related Topic