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);

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 like:

{"status":0、 "data":{"list":[{"foreignId": "8827857641648129226"、 "geo":{"distance":1359、 "lat":31.20926508184017、 "lng":121.59068046014856}、 "id": "netease_8827857641648129226"、 "isFavorited":false、 "lastActiveTime": "2012-05-19T20:26:47Z"、 "lastActivity": "Goal http://126.fm/kFEKl "、 "lastPlace" :""、 "profile":{"avatar": "http://oimagea3.ydstatic.com/image?w=48&h=48&url=http%3A%2F%2Fmimg.126.net%2Fp%2Fbutter%2F1008031648% 2Fimg%2Fface_big.gif "、" agent ":0、" location ":" "、" screenName ":" 4671784460 "、" sigunature ":" "、" tags ":[]}、" source ":"網易"}.....。

4

2 に答える 2

8

変数クラスを確認してくださいpeopleFromJson。objectForKeyを呼び出している時点ではディクショナリではない可能性があります。

このステートメントをurforループの最初の行として配置します
NSLog(@"%@",NSStringFromClass([peopleFromJson class]));

于 2012-06-21T06:02:48.867 に答える
0

私は問題を解決しました、私は問題が簡単だとは思いません、おそらく一部の人々はオブジェクトがNSDirではなくNSStringであることを知っているだけかもしれませんが、実際の問題は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
于 2012-06-21T08:14:26.290 に答える