[NSCFString objectForKey:]: нераспознанный селектор, отправленный экземпляру - PullRequest
0 голосов
/ 30 декабря 2010

В этом коде:

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


}

Эта строка: NSLog (@ "Size:% @", [url objectForKey: @ "size"]);

Вызывает сбой приложения и выдает следующую ошибку:

2010-12-30 00: 33: 29.730 FlixIt [33132: 207] - [NSCFString objectForKey:]: нераспознанный селектор, отправленный экземпляру 0x4e50f00 2010-12-30 00: 33: 29.732 FlixIt [33132: 207] * Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [NSCFString objectForKey:]: нераспознанный селектор, отправленный экземпляру 0x4e50f00'

Вот 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

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Из анализа структуры данных мне кажется, что у вас есть один дополнительный цикл. В цикле "Постеры" попробуйте:

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


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

}

image - это словарь, а ключ "size" имеет тип NSString.

1 голос
/ 30 декабря 2010

Судя по всему, url имеет тип NSString, который не отвечает методу objectForKey:. Другими словами, этот метод не реализован NSString. Если вы знаете типы объектов, которые ожидаете в своих циклах for, вы получите дополнительные проверки компилятора, если будете использовать определенный тип в объявлении вместо id.

Я не знаком с SBJSonParser, но я предполагаю, что большинство вещей, которыми вы манипулируете, возвращаются как NSDictionary, а конкретные поля возвращаются как более подробные типы (например, строки как NSString).

Я также предполагаю, что, запрашивая «размер», вы на самом деле ищете длину строки? В этом случае вам нужно использовать метод length. Если это не то, что вы пытаетесь сделать, будет полезна дополнительная информация.

В качестве примера я вытащил короткий раздел вашего кода.

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

    for (NSString *url in thumbs) {
        NSLog(@"Size: %@", [url length]);

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

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...