Метод, возвращающий значение из асинхронного блока с 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 являются асинхронными блоками, поэтому метод возвращается до того, как блоки завершат свою задачу.

Любая помощь приветствуется.

Ответы на вопрос(3)

Ваш ответ на вопрос