FBSDKGraphRequest в структуре болтов никогда не вызывает блок
У меня есть следующий код:
[[[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;
}];
FBSDKGraphRequest отлично работает вне задачи Bolts, но внутри задачи не вызывается startWithCompletionHandler.
Есть идеи?
3 ответа
Я нашел обходной путь. Просто оберните его в блок основного потока. Это будет работать как шарм.
dispatch_async(dispatch_get_main_queue(), ^{
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];
}];
});
Я столкнулся с той же проблемой. Похоже, что PFFacebookUtils выполняет свой блок продолжения в другом потоке, но похоже, что FBSDKGraphRequest ожидает запуска из основного потока. Я обнаружил, что проблема может быть альтернативно решена путем указания исполнителя.
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
}];
}];
У нас была точно такая же проблема, и мы использовали одно и то же решение, но я не могу найти ни одного сообщения, объясняющего, почему это происходит.