Метод, возвращающий значение из асинхронного блока с FacebookSDK
Я пытаюсь сделать обертку Facebook для SDK Facebook iOS. По сути, идея заключается в том, что мой ViewController не должен делать ничего, кроме показа ex. мои друзья, которые будут приобретены с помощью простого звонка, как
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 являются асинхронными блоками, поэтому метод возвращается до того, как блоки завершат свою задачу.
Любая помощь приветствуется.