我正试图从NSDictionary获取“firstName”,“lastName”,“gender”,“homeCity”和“email”
但它不起作用......我尝试了以下代码:
NSDictionary *userInfo = [fsUser getUserInfo:@"self"];
NSLog(@"userInfo: %@", userInfo);
NSLog(@"name: %@", [userInfo objectForKey:@"firstName"]);
NSLog(@"lastName: %@", [userInfo objectForKey:@"lastName"]);
NSLog(@"gender: %@", [userInfo objectForKey:@"gender"]);
NSLog(@"homeCity: %@", [userInfo objectForKey:@"homeCity"]);
NSLog(@"email: %@", [userInfo objectForKey:@"email"]);
这是我的字典值...
userInfo: {
userDictionary = {
meta = {
code = 200;
errorDetail = "Please provide an API version to avoid future errors.See http://bit.ly/vywCav";
errorType = deprecated;
};
notifications = (
{
item = {
unreadCount = 0;
};
type = notificationTray;
}
);
response = {
user = {
badges = {
count = 0;
items = (
);
};
bio = "";
checkinPings = off;
checkins = {
count = 0;
};
contact = {
email = "email@email.com";
};
firstName = Name;
following = {
count = 0;
};
friends = {
count = 0;
groups = (
{
count = 0;
items = (
);
name = "Amigos em comum";
type = friends;
},
{
count = 0;
items = (
);
name = "Outros amigos";
type = others;
}
);
};
gender = male;
homeCity = "";
id = 3233312;
lastName = lastName;
lists = {
groups = (
{
count = 1;
items = (
);
type = created;
}
);
};
mayorships = {
count = 0;
items = (
);
};
photo = "https://foursquare.com/img/blank_boy.png";
photos = {
count = 0;
items = (
);
};
pings = 0;
referralId = "u-sdsad";
relationship = self;
requests = {
count = 0;
};
scores = {
checkinsCount = 0;
goal = 50;
max = 0;
recent = 0;
};
tips = {
count = 0;
};
todos = {
count = 0;
};
type = user;
};
};
};
}
答案 0 :(得分:2)
使用[userInfo objectForKey:@"userDictionary"] objectForKey:@"response"] objectForKey:@"user"] objectForKey:@"homeCity"]
。
答案 1 :(得分:2)
这是键值编码(KVC)派上用场的地方。你可以这样做(注意使用valueForKey:
:
NSDictionary *userInfo = [fsUser getUserInfo:@"self"];
NSLog(@"userInfo: %@", userInfo);
NSLog(@"name: %@", [userInfo valueForKey:@"response.user.firstName"]);
NSLog(@"lastName: %@", [userInfo valueForKey:@"response.user.lastName"]);
NSLog(@"gender: %@", [userInfo valueForKey:@"response.user.gender"]);
NSLog(@"homeCity: %@", [userInfo valueForKey:@"response.user.homeCity"]);
NSLog(@"email: %@", [userInfo valueForKey:@"response.user.email"]);
但是这不是很有效率,因为你不断深入挖掘同一个词典。这样做会更好:
NSDictionary *userInfo = [fsUser getUserInfo:@"self"];
NSDictionary *user = [userInfo valueForKey:@"response.user"];
NSLog(@"userInfo: %@", userInfo);
NSLog(@"name: %@", [user objectForKey:@"firstName"]);
NSLog(@"lastName: %@", [user objectForKey:@"lastName"]);
NSLog(@"gender: %@", [user objectForKey:@"gender"]);
NSLog(@"homeCity: %@", [user objectForKey:@"homeCity"]);
NSLog(@"email: %@", [user objectForKey:@"email"]);
答案 2 :(得分:1)
它不起作用,因为您的userInfo
没有这样的密钥。
userInfo
有userDictionary
,其中包含meta
,notifications
和response
。
response
有user
,user
有firstName
,lastName
等。
答案 3 :(得分:0)
您的顶级是userInfo,但其中也有“对象”。你将不得不遍历那些以获得名字。这样的事情会起作用:
NSLog(@"first name = %@", userInfo[@"userInfo"][@"userDictionary"][@"response"][@"user"][@"firstName"]);