Metoda zwracająca wartość z bloku asynchronicznego za pomocą FacebookSDK

To, co staram się zrobić, to opakowanie Facebooka dla Facebooka iOS SDK. Zasadniczo chodzi o to, że mój ViewController nie powinien robić nic poza pokazywaniem ex. moi przyjaciele, które zostaną nabyte za pomocą zwykłego połączenia

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

Moja metoda wrapper myFriends powinna wyglądać następująco

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

Problem polega na tym, że openActiveSessionWithReadPermissions i startForMyFriendsWithCompletionHandler są blokami asynchronicznymi, więc metoda powraca przed wykonaniem zadania przez bloki.

Każda pomoc byłaby bardzo mile widziana.

questionAnswers(3)

yourAnswerToTheQuestion