1

Я пытаюсь получить друзей Facebook текущего пользователя с помощью [FBRequestConnection startForMyFriendsWithCompletionHandler], код хорошо работает при вызове его из основного потока, но он никогда не вводит обработчик завершения, когда я вызываю его из фонового потокаПолучение друзей Facebook в фоновом потоке в iOS

- (void)getFacebookFirneds { 
    [FBRequestConnection startForMyFriendsWithCompletionHandler:^(FBRequestConnection *connection, 
                   id result, 
                   NSError *error) { 
     if (!error) { 
      // this code is not reached !! 
     }  
    }]; 
} 

т.е. когда я называю [self getFacebookFirneds] это работает, но когда я использую [self performSelectorInBackground:@selector(getFacebookFirneds) withObject:nil]; никогда не войти в обработчик завершения, не знаю почему!

Я также попытался FBRequest и получил тот же результат

- (void)getFacebookFirneds { 
    FBRequest* friendsRequest = [FBRequest requestForMyFriends]; 
    [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection, 
               NSDictionary* result, 
               NSError *error) { 
     if (!error) { 
      // this code is not reached !! 
     }  
    }]; 
} 

Я также пытался использовать НОД вместо performSelectorInBackground и получил тот же результат

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
             (unsigned long)NULL), ^(void) { 
    [self getFacebookFriends]; 
}); 
+0

Большинство обработчиков FBRequest, вызываемых в основном потоке, проверяют документацию. может быть его одним из них – Pawan

+0

Нужно ли делать запрос из фоновой темы? startWithCompletionHandler - уже асинхронно. Может быть, есть некоторые ограничения от FB sdk ... – DoN1cK

+0

Я делаю длинный процесс в обработчике завершения, поэтому я хочу назвать его в фоновом режиме –

ответ

2

если ваш обработчик потребуется время, чтобы обработать друзей вы можете позвонить [self getFacebookFriends] в основной теме и обработать массив друзей в фоновом режиме т.е.

- (void)getFacebookFriends { 
    [FBRequestConnection startForMyFriendsWithCompletionHandler:^(FBRequestConnection *connection, 
                   id result, 
                   NSError *error) { 
     if (!error) { 
      NSArray *facebookFriends = [result objectForKey:@"data"]; 
     [self performSelectorInBackground:@selector(processFacebookFriends:) withObject:facebookFriends]; 
     }  
    }]; 
} 

- (void)processFacebookFriends:(NSArray *)facebookFriends { 
// put your code here 
} 
Смежные вопросы