2015-05-14 6 views
7

ich den folgenden Code haben:FBSDKGraphRequest in einem Bolzen Rahmen nie ruft Block

[[[PFFacebookUtils logInInBackgroundWithAccessToken:[FBSDKAccessToken currentAccessToken]] continueWithSuccessBlock:^id(BFTask *task) { 

    PFUser *user = task.result; 

    return user; 

}] continueWithSuccessBlock:^id(BFTask *task) { 

    BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; 

    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]; 

    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 

     if (error) { 
      [source setError:error]; 
      return; 
     } 

     [source setResult:result]; 
    }]; 

    return source.task; 
}]; 

Die FBSDKGraphRequest funktioniert außerhalb der Bolzen Aufgabe, aber in der Aufgabe der startWithCompletionHandler wird nicht aufgerufen werden.

Irgendwelche Ideen?

Antwort

20

Ich habe einen Workaround gefunden. Wickeln Sie es einfach in einen Haupt-Thread-Block. Es wird wie ein Zauber wirken.

+3

Dies ist eine große Korrektur. Sollte mehr Upvotes haben. Danke @yuhua! – maxhud

+0

immer noch nicht ruft den Block der Handler :( –

+1

arbeitete für mich. Ich rief dieses "initWithGraphPath" aus Hintergrundthread und anscheinend sollte es nur aus dem Hauptthread aufgerufen werden. –

2

Wir hatten das gleiche genaue Problem und wir verwendeten die gleiche Lösung, aber ich kann anscheinend keine Posts finden, die erklären, warum dies geschieht.

+1

Jetzt ist es alles Open Source, die wir können sollten Ich werde noch einmal nachsehen, ob ich die Zeit habe und zu dir zurückkomme. –

+0

Danke, lass mich wissen, ob es irgendwas gibt, mit dem ich helfen kann oder schau mir selbst. Vielleicht habe ich diese Woche freie Zeit, um zu helfen . – Constantine

2

Ich stieß auf das gleiche Problem. Es scheint, dass PFFacebookUtils seinen Fortsetzungsblock auf einem anderen Thread ausführt, aber es scheint, dass FBSDKGraphRequest erwartet, aus dem Hauptthread gestartet zu werden. Ich fand das Problem kann alternativ durch Angabe eines Executors gelöst werden.

BFTask* loginTask = [PFFacebookUtils logInInBackgroundWithReadPermissions:@[]]; 
[loginTask continueWithExecutor:[BFExecutor mainThreadExecutor] withSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { 
    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]; 
    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
     // This code gets called properly 
    }]; 
}]; 
Verwandte Themen