Methode, die einen Wert aus einem asynchronen Block mit FacebookSDK zurückgibt

Was ich versuche zu tun, ist ein Facebook-Wrapper für das Facebook iOS SDK. Grundsätzlich ist die Idee, dass mein ViewController nichts anderes tun soll, als ex zu zeigen. Meine Freunde, die mit einem einfachen Anruf wie erworben werden

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

Meine wrapper myFriends-Methode sollte so aussehen

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

Das Problem ist, dass openActiveSessionWithReadPermissions und startForMyFriendsWithCompletionHandler asynchrone Blöcke sind, sodass die Methode zurückgegeben wird, bevor die Blöcke ihre Aufgabe abschließen.

Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage