Método retornando valor do bloco assíncrono com o FacebookSDK

O que estou tentando fazer é um wrapper do Facebook para o SDK do Facebook para iOS. Basicamente, a idéia é que meu ViewController não deveria fazer nada além de mostrar ex. meus amigos que serão adquiridos com uma simples chamada como

self.friends = [FacebookWrapper myFriends];
[self.tableView reloadData];

Meu método wrapper myFriends deve ficar assim

+ (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;
}

O problema é que o openActiveSessionWithReadPermissions e o startForMyFriendsWithCompletionHandler são blocos assíncronos, então o método retorna antes que os blocos concluam sua tarefa.

Qualquer ajuda seria muito apreciada.

questionAnswers(3)

yourAnswerToTheQuestion