2011-03-27 35 views
0

自定義圖表API請求有可能使使用FBConnect自定義圖形API調用?在iPhone SDK

例如,

[facebook requestWithGraphPath:@"me" andDelegate:self]; 

有了這個電話,我可以看到我自己的詳細信息。

[facebook requestWithGraphPath:@"me/friends" andDelegate:self]; 

有了這個,我可以看到我的朋友。

[facebook requestWithGraphPath:@"FRIEND_ID/picture" andDelegate:self]; 

有了這個,我可以看到一個朋友的圖片,id = FRIEND_ID。

有沒有一種可能,以使自定義圖形API調用,採取ID,圖片,名稱,例如電子郵件,我所有的Facebook好友,在短短的一個電話嗎?

問題,我有,當我打電話:

[facebook requestWithGraphPath:@"me/friends" andDelegate:self]; 

在:

- (void)request:(FBRequest *)request didLoad:(id)result; 

我拿ID的朋友,然後,在for循環中我想這樣做:

[[self appDelegate].facebook requestWithGraphPath:[NSString stringWithFormat:@"%@/picture",[[party.attendantsDictionary allKeys] objectAtIndex:i]] andDelegate:self]; 

之後,在

- (void)request:(FBRequest *)request didLoad:(id)result; 

我:

if ([result isKindOfClass:[NSData class]]) { 
    [party.attendantsPictures addObject:[[UIImage alloc] initWithData:result]]; 
} 

的問題是,我的朋友們的照片和名字都搞混了。

任何人有一個解決方案嗎?

回答

0

你可以嘗試NSRunLoop。

在我的情況,我想負荷用戶的姓名,身份,檔案圖片一次。但是,requestWithGraphPath及其委託didload:result一次只能處理每個請求。因此,我所做的是:

1 /設置標籤編號

2 /每個請求後,等待完成的要求,由1

所以在我的按鈕操作增加標籤號碼,

tagNo = 0; 
[facebook requestWithGraphPath:graphPathZero // For user's name 
         andDelegate:detailVC]; 
while (tagNo == 0) && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]); 

[facebook requestWithGraphPath:graphPathOne // For user's status 
         andDelegate:detailVC]; 
while (tagNo == 1) && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]); 

[facebook requestWithGraphPath:graphPathTwo // For user's profile picture 
         andDelegate:detailVC]; 
while (tagNo == 2) && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]); 

而且在委託,

switch (tagNo) { 
case 0: 
    // Do something with result 
    break; 
case 1: 
    // Do something with result 
    break; 
case 2: 
    // Do something with result 
    break; 
default: 
    break; 
} 
++tagNo; 

我可能不會覆蓋「做什麼w^ith結果「在這裏,因爲它在其他地方在stackoverflow。這可能不是解決方案,但我發現它是平易近人的。尋找更多的貢獻;)

+0

嗯,我從來沒有用過NSRunLoop。你能給我一個提示它是什麼嗎? (蘋果的Docs有點混亂......)。 – Djuro 2011-03-29 06:21:37

+0

解決方案應該是正確的......我所做的就像請求 - 等待請求完成 - 然後繼續下一個請求 – Tommy 2011-03-31 10:56:24

0

嗯,我從來沒有用過NSRunLoop。你能給我一個提示它是什麼嗎? (蘋果的Docs有點混亂......)。

在你的情況,我會做這樣的事情:

NSString *fql = @"SELECT name, uid, pic_square, status FROM user WHERE uid = me() OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:fql, @"query", nil]; 
[facebook requestWithMethodName:@"fql.query" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

這樣一來,你會從用戶得到的一切,你想要的。