2013-02-12 2 views
0

json을 사용하여 서버에서 데이터를 가져옵니다. 체크 된 URL은 json에서 가져온 모든 값을 콘솔에 출력하여 조회 응답을받습니다. 하지만 사전과 배열로 시도해도 모두 중단 점에 의해 null 값을 표시하지만 콘솔에 인쇄 할 때 데이터가 표시됩니다. 아래는 코드입니다.NSdictionary가 Null이 아니지만 0 키/값을 표시합니다.

NSString *urlStr = [NSString stringWithFormat:@"http://server39.pivbfg.com/360ads/apps/ads/%@/android/1360/ord0.9109502528132325?json=1&package_url=%@",self.mStrPid, base64String]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: 
          [NSURL URLWithString: 
          [urlStr stringByAddingPercentEscapesUsingEncoding: 
           NSUTF8StringEncoding]]]; 
NSLog(@"req-------------%@",request); 

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

NSDictionary *json_dict = [json_string JSONValue]; 
NSLog(@"json_dict\n%@",json_dict); 
NSLog(@"json_string\n%@",json_string); 
NSMutableArray *arrAds = [[NSMutableArray alloc]init]; 
arrAds = [json_dict valueForKey:@"ads"]; 

요청이 정상적으로 처리됩니다. json_string은 정상입니다. 그러나 json_dict는 콘솔에서 값을 인쇄하지만 중단 점에서 null을 표시합니다. 이것에 대한 이유는 무엇 일 수 있습니다. 한 가지 ARC를 사용하고 있는데이 코드에 영향을 미칩니다. 위의 사항을 안내하십시오. 응용 프로그램을 종료 * 때문에, 이유는 'NSUnknownKeyException'캐치되지 않는 예외 :

오류입니다 '[< __NSCFString 0x9851e00> valueForUndefinedKey :] :이 클래스는 키 값을 코딩 규격이 아닌 주요 광고입니다.'*을 먼저 던져 호출 스택 : (0xb5012 0x13a9e7e 0x13dfb1 0xe565ed 0xdc28db 0xdc288d 0x613d 0x3d1707 0x3d1772 0x320915 0x320caf 0x320e45 0x329e57 0x5942 0x2ed697 0x2edc87 0x2eee8b 0x3001f5 0x30112b 0x2f2bd8 0x2202df9 0x2202ad0 0x2abf5 0x2a962 0x5bbb6 0x5af44 0x5ae1b 0x2ee6ba 0x2f053c 0x544d 0x2b65을 0x1) 의 libC++ abi.dylib : 호출 종료 예외 발생

편집 코드

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

    NSError *error; 
    NSData *jsonData = [json_string dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *results = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 

NSLog(@"results\n%@",results); 
NSMutableArray *arrAds = [[NSMutableArray alloc]init]; 
arrAds = [results valueForKey:@"ads"]; 
NSLog(@"dict-------------%@",arrAds); 

이제 arrAds 배열에도 동일한 문제가 발생합니다. 그것은 콘솔에 값을 인쇄하지만 비어 있습니다.

+0

u가 다음과 같이 시도했습니다 : 'NSDictionary * json_dict = (NSDictionary *) [json_string JSONValue]'? 그리고 나는 또한 귀하의 질문에 적용 할 수있는 이것을 찾으십시오 : http://stackoverflow.com/questions/10122534/jsonvalue-arc-issue – dumbfingers

+0

그럼 오류 메시지가 'NSCFString' 인스턴스로 전송되므로 문제가 있어야한다고 '[json_string JSONValue]'(사전 대신 문자열을 반환) – Alladinian

+0

@ ss1271이 작동하지 않습니다. –

답변

0

글쎄, 오류는 JSON에서 검색하는 속성이 사전이 아니라 문자열이라는 것을 알려줍니다. json_string에 유효한 JSON 개체가 없습니다. 당신의 예에서

you'r 또한 누출 :

NSMutableArray *arrAds = [[NSMutableArray alloc]init]; 
arrAds = [json_dict valueForKey:@"ads"]; 

당신은 같은 변수에 다음 줄을 새 개체를 assing에 새 NSMutableArray을 만들 수 있습니다. 또한 반환 된 객체는 변경 불가능한 버전이 아닙니다. 그냥 대체 할 수 있습니다 :

NSMutableArray *arrAds = [[json_dict objectForKey:@"ads"] mutableCopy]; 
+0

작동하지 않습니다. –

+0

NSLog (@ "json_string \ n % @", json_string)의 출력을 게시하십시오. 'JSON이 유효하지 않은 것처럼 보입니다. – rckoenes

+0

json이 유효한지 확인했습니다 –

관련 문제