我想要做的是Facebook iOS SDK的Facebook包裝。基本上這個想法是,我的ViewController應該什麼都不做,只是顯示ex。我將用一個簡單的調用,比如方法從FacebookSDK異步塊返回值
self.friends = [FacebookWrapper myFriends];
[self.tableView reloadData];
我的包裝myFriends方法來獲得朋友應該像這樣
+ (NSArray *)myFriends
{
__block NSArray *friends = nil;
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if(FB_ISSESSIONOPENWITHSTATE(status)) {
[FBRequestConnection startForMyFriendsWithCompletionHandler:^(FBRequestConnection *connection, id data, NSError *error) {
CFRunLoopStop(CFRunLoopGetCurrent());
if(error) {
return;
}
NSArray *friendsData = (NSArray *)[data data];
NSMutableArray *fbFriends = [NSMutableArray array];
for(id friendData in friendsData) {
Friend *friend = [Friend friendWithDictionary:friendData];
fbFriends addObject:friend];
}
friends = [NSArray arrayWithArray:fbFriends];
}];
CFRunLoopRun();
}
}];
return friends;
}
的問題是openActiveSessionWithReadPermissions和startForMyFriendsWithCompletionHandler是異步塊,這樣之前的方法返回塊完成他們的任務。
任何幫助將非常感激。
這正是我一直在使用最多(當然我打電話我在錯誤的情況下completionBlock)的邏輯。但是,我想知道是否有任何方法有方法返回從方法本身內的異步塊獲取的值。不管怎麼說Thiago! – ozzotto 2013-02-28 15:59:13
好吧!不幸的是,沒有辦法做到你想要達到的目的 - 至少不是沒有完全控制代碼,你沒有,因爲我們正在談論Facebook SDK :) – 2013-02-28 21:33:23