2010-12-30 2 views
0

전송 :[NSCFString objectForKey는 :] : 미정 선택기이 코드 인스턴스

- (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 (@ "면적 % @", [URL의 objectForKey : @ "크기"]);

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

데이터 구조를 살펴보면 추가 루프가 하나있는 것 같습니다. 은 "포스터"루프 시도에서 :

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


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

} 

이미지는 사전 및 키 "크기"는 NSString 유형이있다.

+0

고마워요! 그거야. 그러나 'NSArray'응답 할 수 없습니다 '-objectForKey :' – user558096

+0

NSArray NSArray 변경하고 경고를 지우려면 것 같았다. 다시 한 번 감사드립니다! – user558096

1

외관상으로 urlobjectForKey:에 응답하지 않는 NSString 유형입니다. 즉, 해당 메서드는 NSString에 의해 구현되지 않습니다. for 루프에서 예상하는 개체 유형을 알고있는 경우 id 대신 선언에서 특정 형식을 사용하면 몇 가지 추가 컴파일러 검사를 얻을 수 있습니다.

나는 SBJSonParser에 익숙하지 않은,하지만 난 당신이 조작하는 것들의 대부분은 (NSString으로 예를 들어, 문자열) 특정 필드 더 자세한 유형으로 반환되는 NSDictionary, 반환한다고 가정합니다.

또한 '크기'를 쿼리하면 실제로 문자열의 길이를 찾고 있다고 가정합니까? 이 경우 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"]]; 

    } 
} 
관련 문제