2010-12-30 5 views
0

In diesem Code:[NSCFString objectForKey:]: Unbekannter Selektor gesendet Instanz

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


} 

Diese Zeile: NSLog (@ "Größe:% @", [url objectForKey: @ "Größe"]);

ist die App verursacht den folgenden Fehler zum Absturz zu bringen und zu werfen:

2010-12-30 00: 33: 29,730 FlixIt [33132: 207] - [NSCFString objectForKey:]: Unbekannter Selektor an Instanz gesendet 0x4e50f00 2010-12-30 00: 33: 29,732 FlixIt [33132: 207] * app aufgrund abgefangene Ausnahme 'NSInvalidArgumentException' enden, Grund: '- [NSCFString objectForKey]: unerkannte Selektor Beispiel 0x4e50f00 gesendet'

Hier ist der 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

Antwort

2

Aus dem Blick in die Datenstruktur scheint es mir, dass Sie eine zusätzliche Schleife haben. In der Schleife "Poster" versuchen:

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


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

} 

Bild ist ein Wörterbuch und der Schlüssel "Größe" hat NSString Typ.

+0

Danke! Das funktioniert. Allerdings bekomme ich die folgende Warnung: 'NSArray' reagiert möglicherweise nicht auf '-objectForKey:' – user558096

+0

Das NSArray in ein NSDictionary geändert und das schien die Warnung zu löschen. Danke noch einmal! – user558096

1

Nach dem Aussehen url ist vom Typ NSString, die nicht auf die Methode objectForKey: reagiert. Mit anderen Worten, diese Methode wird nicht von NSString implementiert. Wenn Sie die Typen der Objekte kennen, die Sie in Ihren for-Schleifen erwarten, würden Sie einige zusätzliche Compiler-Prüfungen erhalten, wenn Sie den spezifischen Typ in der Deklaration anstelle von id verwendet haben.

Ich bin nicht vertraut mit SBJSonParser, aber ich nehme an, dass die meisten der Dinge, die Sie als NSDictionary zurückgegeben werden manipuliert, die bestimmte Felder als detailliertere Typen zurückgegeben werden (z Strings als NSString).

Ich nehme auch an, dass Sie tatsächlich nach der Länge der Zeichenfolge suchen, indem Sie nach "Größe" fragen? In diesem Fall müssen Sie die Methode length verwenden. Wenn das nicht das ist, was Sie zu tun versuchen, dann wären weitere Informationen nützlich.

Als Beispiel habe ich einen kurzen Abschnitt Ihres Codes herausgezogen.

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

    } 
} 
Verwandte Themen