2012-06-21 3 views
1
//initialize the people data list 
- (void)initializePeopleListFromJson:(CLLocationCoordinate2D)coordinate auraId:(NSString *)auraId 
{ 

//initialize the NSMutableArray list 
self.peopleList = [[NSMutableArray alloc] init]; 

//retrieve the coordinate of myself 
//NSString *myCoordinate = [NSString stringWithFormat:@"%f,%f", coordinate.latitude, coordinate.longitude]; 
NSString *myCoordinate = @"31.2,121.6"; 

NSString *url = [NSString stringWithFormat:@"%@%@%@%@", @"http://services.portaura.mobi/AuraMesh/auraFinder/findPeoples?ll=", myCoordinate, @"&source=tencent,netease,kaixin&myAuraId=", auraId]; 

NSLog(@"*********** %@", url); 

//retrieve the people list from web service 
NSDictionary* result = [NSDictionary dictionaryWithContentsOfJSONURLString:url]; 
NSArray *peopleListFromJson = [result objectForKey:@"data"]; 

// NSLog (@ "peopleList : % @", peopleListFromJson);NSCFString objectForKey 인스턴스로 전송 된 인식 할 수없는 셀렉터

People *people; 
UserProfile *userProfile; 
NSDictionary *geoFromJson; 
NSDictionary *profileFromJson; 



for (NSDictionary *peopleFromJson in peopleListFromJson) 
{ 

    people = [[People alloc] init]; 
    userProfile = [[UserProfile alloc] init]; 

    people.foreignId = [peopleFromJson objectForKey:@"foreignId"]; 
    people.id1 = [peopleFromJson objectForKey:@"id"]; 
    people.isFavorited = [peopleFromJson objectForKey:@"isFavorited"]; 
    people.lastActiveTime = [peopleFromJson objectForKey:@"lastActiveTime"]; 
    people.lastActivity = [peopleFromJson objectForKey:@"lastActivity"]; 
    people.lastPlace = [peopleFromJson objectForKey:@"lastPlace"]; 
    people.source = [peopleFromJson objectForKey:@"source"]; 

    NSLog(@"AAAAAAAA %@", [peopleFromJson objectForKey:@"foreignId"]); 


    //process geo 
    geoFromJson = [[NSDictionary alloc] init]; 
    geoFromJson = [peopleFromJson objectForKey:@"geo"]; 

    CLLocationCoordinate2D coordinate; 
    coordinate.latitude = [[geoFromJson objectForKey:@"lat"] floatValue]; 
    coordinate.longitude = [[geoFromJson objectForKey:@"lng"] floatValue]; 

    people.geo = coordinate; 
    people.distance = [geoFromJson objectForKey:@"distance"]; 


    //process profile 
    profileFromJson = [[NSDictionary alloc] init]; 
    profileFromJson = [peopleFromJson objectForKey:@"profile"]; 

    people.avatar = [profileFromJson objectForKey:@"avatar"]; 
    people.gender = [profileFromJson objectForKey:@"gender"]; 
    people.location = [profileFromJson objectForKey:@"location"]; 
    people.screenName = [profileFromJson objectForKey:@"screenName"]; 
    people.signature = [profileFromJson objectForKey:@"sigunature"]; 

    //people.userProfile = userProfile; 
    [self addPeople:people]; 

} 

}

it give me the [__NSCFString objectForKey:]: unrecognized selector sent to instance 0x1808d0,can you give some advice 

JSON 같은

{ "상태"0 "데이터"{ "목록": [{ "foreignId": "8827857641648129226", "지리적 ": {"거리 ": 1359,"lat ": 31.20926508184017,"lng ": 121.59068046014856},"id ":"netease_8827857641648129226 ","isFavorited ": false,"lastActiveTime ":"2012-05-19T20 : 26 : 47Z ","lastActivity ":"목표 http://126.fm/kFEKl ","lastPlace ":" ","프로필 ": {"avatar ":"http://oimagea3.ydstatic.com/image?w=48 &h = 48 & url = http % 3 % 2F % 2Fmimg.126.net % 2Fp % 2Fbutter % 2F1008031648 % 2Fimg % 2Fface_big.gif ","gender ": 0,"location ":" ","screenName ":"4671784460 ","sigunature " , "tags": []}, "source": "netease"} ......

+2

대부분의 경우'profileFromJson = [peopleFromJson objectForKey : "프로필"@]'대신 NSDictionary와의있는 NSString을 반환합니다 .... 어떻게 JSON 정말 보입니까? –

+0

저는 새로운 iOS 개발자입니다. 다른 사람들을 수정하려고합니다. 감사합니다. – pengwang

+0

JSON에 의존하기 때문에 항상 올바르지 않다고 생각합니다. 때로는 NSDictionary가 맞습니다. 때로는 NSString입니다. – pengwang

답변

8

check ur 변수 클래스 peopleFromJson objectForKey를 호출하는 순간 사전이 아닐 수도 있습니다.

, 난 아마 어떤 사람들은 원인 개체가되지 NSDir을있는 NSString됩니다 알고, 문제가 쉽게 생각할 수 없다, UR for 루프
NSLog(@"%@",NSStringFromClass([peopleFromJson class]));

+0

당신이 맞아요, peopleFromJson은 NSDictionary가 아닙니다. 문제를 해결하는 데 도움이되는 다른 검색 키를 줄 수 있습니까? – pengwang

0

내가 문제를 해결 한에서 첫 번째 줄이 문을 넣어 하지만 실제 문제는 json "스타일"에 따라 다르며, 때로는 제 코드가 정확하지만 다른 json의 경우에는 제 질문 json이 맞지 않습니다. 그래서 해결은 다음과 같습니다

if (![peopleListFromJson isKindOfClass:[NSArray class]] && peopleListFromJson!=nil) { 
    peopleListFromJson =[NSArray arrayWithObject:peopleListFromJson]; 
} 

because i used 
NSDictionary* result = [NSDictionary dictionaryWithContentsOfJSONURLString:url]; 
NSArray *peopleListFromJson = [result valueForKeyPath:@"data.list"]; 
so peopleListFromJson!=nil is impotent 
관련 문제