2011-10-05 5 views
1

에서 구문 분석 JSON에서 오류가 나는 테이블에 갈 거예요로 JSON 데이터 및 디스플레이를 시도하고 내 JSON 데이터가이얻기 아이폰

{"isError":false,"ErrorMessage":"","Result":{"Count":4,"Data":[{"ContentID":"127_30_1309793318065","ContentTypeID":1,"UserCaption":"Gandhinagar(Kanjurmarg)","UserComment":"central\n","DateRecorded":"\/Date(1309793318000+0530)\/","Data":"","ShareType":true,"Views":0,"PlayTime},{},{},{}];};isError = 0;} 

내가 좋아하는 prasing하고처럼이

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{  
    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",loginStatus); 



    //this is for the getting the data from the server with help of JSON 
    NSString *json_string = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding]; 
    NSDictionary *result = [json_string JSONValue]; 
    /
    //this for holding the Array value which come from the server 
    NSMutableArray *results = [[NSMutableArray alloc] init]; 
    for (int index = 0; index<[reviewsvalues count]; index++) 
    { 
     NSMutableDictionary * value = [reviewsvalues objectAtIndex:index]; 
     ReviewsResult * result = [[ReviewsResult alloc] init]; 
     result.User_Caption = [value objectForKey:@"UserCaption"]; 
     result.ContentType_Id = [value objectForKey:@"DateRecorded"]; 
     result.Average_Rating = [value objectForKey:@"AverageRating"]; 
     //OVER here MY APP GET CRASH 


    } 


} 

하지만, 오류가 발생하여 오류가 발생합니다.

[__NSCFDictionary objectAtIndex :] : 인스턴스로 전송 된 인식 할 수없는 선택자

답변

2

문제는 간단합니다.

reviewsvalues은 NSDictionary이어야하며 reviewsvaluesobjectAtIndex:으로 지정하면 안됩니다. 이 당신을 도와 valueForKey 희망

int count = [[reviewsvalues valueForKey:@"Count"] intValue]; 
NSArray *reviewsArray = [reviewsvalues valueForKey:@"Data"]; 
int count = [reviewsArray count]; 

cell.textLabel.text = [[reviewsArray objectAtIndex:indexPath.row] valueForKey:@"ContentID"]; 

처럼

대신 당신은 호출해야합니다.

더 자세한 도움이 필요하면 알려 주시기 바랍니다.

+0

네, 맞습니다.하지만이 NSArray * reviewsArray = [reviewsvalues ​​valueForKey : @ "Data"]; 하지만? 어떻게 셀에 값을 설정하고 어떻게 행 수를 계산할 수 있습니다. – Harish

+0

@Harish : 각 인덱스에서 reviewArray에 사전이 있습니다. –

+0

Stackchat에서 라인 채팅을 할 수 있습니까 – Harish

1

당신은 reviewsvalues은 이제 NSDictionary 의미 reviewsvalues = [result objectForKey:@"Result"];

설정합니다.

{"Count":4,"Data":[...]} 

NSDictionary

가 그 NSArray의 방법 중 하나입니다, -objectAtIndex:에 응답하지 않습니다 "결과"가 아닌 배열, 사전이다.

당신은 또 다른 단계가 필요합니다

NSArray *reviewsArray = [reviewsvalues objectForKey:@"Data"]; 

을 당신이 그것을에있는 동안, 당신은 빠른 열거를 사용할 수 있습니다.

for (NSDictionary *review in reviewsArray) { 
    ReviewsResult * result = [[ReviewsResult alloc] init]; 
    result.User_Caption = [review objectForKey:@"UserCaption"]; 
    result.ContentType_Id = [review objectForKey:@"DateRecorded"]; 
    result.Average_Rating = [review objectForKey:@"AverageRating"]; 
} 

편집 : 또한 매우 방어 적으로 코딩하지 않았 음을 알아야합니다. 데이터가 귀하의 예와 정확히 일치하지 않으면 어떻게됩니까? "데이터"또는 "결과"와 같은 값이 누락되면 어떻게됩니까? 약간의 예기치 않은 상황이 발생할 경우 앱이 충분히 울리지 않아야합니다.

+0

예기치 않은 상황이 발생할 때 어떻게 처리 할 수 ​​있습니까? – Harish

+0

심지어 크래시가 발생하지 않고 오류가 발생합니다. 'NSInvalidArgumentException'이유 : '- [__ NSCFDictionary objectAtIndex :] : – Harish

+0

이 링크의 NSArray * reviewsArray = [reviewsvalues ​​objectAtIndex : @ "Data"]; 그것은 'objectAtIndex'인수 1을 캐스팅하지 않고 포인터에서 정수로 전달하는 경고 메시지를 표시합니다. – Harish