2012-11-14 2 views
1
의 row하기

안녕하세요 나는이처럼 보이는 JSON 얻을 :이 코드에서NSArray를

features: (
    { 
    attributes =   { 
     Gecontroleerd = Ja; 
    }; 
    geometry =   { 
     x = "5.968097965285907"; 
     y = "52.50707112779077"; 
    }; 
} 
) 

:

NSDictionary *root = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil]; 
NSArray *data = [root objectForKey:@"features"]; 
NSLog(@"features: %@", data); 

for (NSArray *row in data) { 
    NSString *latitude = row[5]; 
    NSString *longitude = row[7]; 
    NSString *crimeDescription = @"test"; 
    NSString *address = @"banaan"; 

을 그리고 u는 X에가 위도 와 y 값 52.50707112779077에 대한 5.968097965285907 값이 필요

[__NSCFDictionary objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x14831450 
2012-11-14 10:10:59.000 ArrestPlotter[6330:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x14831450' 
*** First throw call stack: 
(0x1860012 0x1655e7e 0x18eb4bd 0x184fbbc 0x184f94e 0x2dbc 0x3b8f 0x1cc1e 0x16696b0 0xfa0035 0x17e3f3f 0x17e396f 0x1806734 0x1805f44 0x1805e1b 0x224a7e3 0x224a668 0x4a765c 0x25bd 0x24e5 0x1) 
libc++abi.dylib: terminate called throwing an exception 
(lldb) 
01 : 경도

는하지만 난이 오류가

행을 선택해야하는 사람이 있습니까?

유일한 문제는 행 번호를 변경해야한다는 것입니다. 아니면 다음과 같은 것이 있어야합니다 : [1] [5]. 임이

+0

"json that looks like this"를 사용하면 json이 유효하지 않습니다. 그것은 단지 NSDictionary 기술입니다. – erkanyildiz

+0

나는이 JSON이 유효하지 않으며, 실제 JSON을 게시한다. (그리고 먼저 jsonlint.com에서 확인한다.) – borrrden

+0

아니, 나는 json을 얻지 만, 다음과 같이한다. NSArray * data = [root objectForKey : @ "features"]; 그리고 나서 NSArray를 얻습니다. 내가 잘못 말했다면 –

답변

3
NSArray *data = [root objectForKey:@"features"]; 
NSLog(@"features: %@", data); 

for (NSDictionary *dic in data) { 
    NSDictionary geometry = [dic objectForKey:@"geometry"]; 
    // Do what you want.. 
    NSString *myAwesomeX = [geometry objectForKey:@"x"]; 
    NSString *myAwesomeY = [geometry objectForKey:@"y"]; 
} 
+0

하지만이 경도는 어떻게 얻을 수 있습니까? 위도? 더 이상 행 기능을 사용할 수 없습니다 –

+0

그냥 문자열을 변환 후 ... – Peres

+0

감사합니다, 그것은 즉시 작동 –

2

여기서 문제를 어떻게 작동하는지 확신하지 당신이 행을 객체에 대한 선택 메시지를 보내려고한다는, 즉 메모리 있는 NSDictionary (NSCFDictionary?) 개체에, 당신은하려고하는 NSArray처럼 관리하십시오.

objectAtIndexedSubscript (행 [5] 및 행 [7]이 호출하는 기본) 메서드는 NSDictionary에 있지만 NSArray에는 없습니다.

변경

for (NSDictionary *row in data) { 

에 의해

for (NSArray *row in data) { 

또한, 당신은에 대한 내부 데이터의 변경 관리 로그 문의 결과보고 협정 오순절을 행동해야합니다.

도움이되기를 바랍니다.