Método que devuelve valor desde un bloque asíncrono con FacebookSDK

Lo que estoy tratando de hacer es un contenedor de Facebook para el SDK de iOS de Facebook. Básicamente, la idea es que mi ViewController no debe hacer nada más que mostrar ex. Mis amigos que serán adquiridos con una simple llamada como

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

El método de myFriends de mi envoltorio debería tener este aspecto

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

El problema es que openActiveSessionWithReadPermissions y startForMyFriendsWithCompletionHandler son bloques asíncronos, por lo que el método vuelve antes de que los bloques completen su tarea.

Cualquier ayuda sería muy apreciada.