2013-10-08 34 views
0

我有一個NSDictionary中稱爲itemDict和打印從NSDictionary中獲取密鑰值與GOOGLEPLUS類

NSLog(@"itemDictValues:%@",itemDict); 

輸出是在該格式時:

itemDictValues: 
GTLPlusPerson 0xab821e0: 
{etag:""LTv_6IJISeUQGTVXLjMeOtebkoM/eup2crXcelmpMFKesXWlGkJjCiE"" kind:"plus#person" id:"1145282979128841" objectType:"person" displayName:"FirstName LastName" image:{url} url:"https://plus.google.com/1145282979128841"} 

從這我需要提取對應的值到ID,displayNameurl到我的NSString變量,在這種格式

profileId=1145282979128841; 

Name=FirstName LastName; 

Profilepic=https://plus.google.com/1145282979128841; 

我該如何解決這個問題?

+0

你說itemDict是一個NSDictionary,但它不會出現基於你說它不響應o​​bjectForKey。你可以在itemDict的設置方法上顯示一些代碼嗎?它不是一個NSDictionary,而是一個GTLPlusPerson? –

+0

NSMutableArray * friends = [NSMutableArray array]; for(NSDictionary * itemDict in peopleFeed.items) { SocialProfile * friend = [[SocialProfile alloc] initWithDictionary:itemDict socialMedia:kSocialMediaGooglePlus]; [friends addObject:friend]; } – Gamerlegend

+0

GTLPlusPeopleFeed * peopleFeed,是如何定義peopleFeed的。 – Gamerlegend

回答

4

試試這個...

_profileId=(NSString*)((GTLPlusPerson*)itemDict).identifier; 
_profileName= (NSString*)((GTLPlusPerson*)itemDict).displayName; 
_profileImageURLPath=(NSString*)((GTLPlusPerson*)itemDict).image.url; 
+0

這就像魅力,感謝:) – Gamerlegend

0

對於一個NSDictionary

 NSString *profileId = itemDict[@"id"] 
    NSString *name = itemDict[@"displayName"] 
    NSString *profilePic = itemDict[@"image"][@"url"] 

如果是GTLPlusPerson對象,然後用Objective-C的點語法

 NSString *profileId = itemDict.id; 
    NSString *name = itemDict.displayName; 
    NSString *profilePic = itemDict.url; 

訪問屬性由你的日誌,似乎這是一個GTLPlusPerson對象,而不是看一個NSDictionary

+0

拋出錯誤NSInvalidArgumentException',原因:' - [GTLPlusPerson objectForKey:]:無法識別的選擇發送到實例0xae49b60' – Gamerlegend

+0

我不知道你解析的對象。你解析一個NSDictionary或GTLPlusPerson? –

+0

查看更新的答案 –

0

你只是解析詞典來獲得你想要的信息。

NSString *profileId = [itemDict objectForKey:@"id"]; 
NSString *displayName = [itemDict objectForKey:@"displayName"]; 

現在,我認爲這是一個字典本身。而且,由於你沒有指定那是什麼字典裏面,所以這就是我認爲你應該做的:

NSDictionary *imageDict = [itemDict objectForKey:@"image"]; 
NSURL *imageURL = [imageDict objectForKey:@"url"]; 

然後得到的UIImage變得非常簡單:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:imageURL]; 
NSData *imageData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
UIImage *image = [[UIImage alloc] initWithData:imageData]; 

你應該選擇sendAsynchronousRequest方法它發生在後臺並且不支持你的應用程序的功能。

+0

NSString * profileId = [itemDict objectForKey:@「id」] does not work,throws NSInvalidArgumentException',reason:' - [GTLPlusPerson objectForKey:]:無法識別的選擇器發送到實例0xae49b60' – Gamerlegend

0
NSArray* peopleList = peopleFeed.items; 
NSLog(@"peopleList %@ ",peopleList.description); 
for (NSArray *dict in peopleFeed.items) { 
        NSString *peopleStrID=(NSString*)((GTLPlusPerson*)dict).identifier; 
        NSLog(@"peopleStrID %@",peopleStrID); 
        NSString *peopleName = (NSString*)((GTLPlusPerson*)dict).displayName; 
        NSString *peoplePic = (NSString*)((GTLPlusPerson*)dict).image.url; 
       } 
0

最簡單的方法是使用代碼谷歌提供:

if ([[GPPSignIn sharedInstance] authentication]) { 
     // The user is signed in. 

     GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:@"me"]; 


     GTLServicePlus* plusService = [[GTLServicePlus alloc] init]; 
      plusService.retryEnabled = YES; 

     //auth = GTMOAuth2Authentication object from login   

     [plusService setAuthorizer:auth]; 

     [plusService executeQuery:query 
       completionHandler:^(GTLServiceTicket *ticket, 
            GTLPlusPerson *person, 
            NSError *error) { 
        if (error) { 
         GTMLoggerError(@"Error: %@", error); 
        } else { 
         // Retrieve the display name and "about me" text 
         NSString *description = [NSString stringWithFormat:@"%@\n%@", person.displayName, person.aboutMe]; 
         NSString *imageURL = person.image.url; 

        } 
       }]; 



    } else { 
     //user is logged out 
    } 
}