2017-02-09 14 views
5

Używam następujący kod do wyświetlania toast po Facebooku uwierzytelnianiaZobacz pojawiać się z opóźnieniem po uwierzytelnieniu Facebooku

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) // check Fb is configured in Settings or not 
{  
     accountStore = [[ACAccountStore alloc] init]; // you have to retain ACAccountStore 
     ACAccountType *fbAcc = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 
     NSString *key = @"xxxxx"; 
     NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil]; 
     [accountStore requestAccessToAccountsWithType:fbAcc options:dictFB completion:^(BOOL granted, NSError *error) { 
          if (granted) { 
           NSLog(@"Perform fb registration"); 
          } else { 
           NSLog(@"Facebook 1”); 
           [[Toast shared] showToast:self.view withText:@"You disabled your app from settings."]; 
           NSLog(@"Facebook 2”); 
          } 

         }]; 
} 

NSLog(@"Facebook 1”); i NSLog(@"Facebook 2”); są wykonującego i dzienników drukowania odpowiednio. Jednak oświadczenie toast pomiędzy tymi dwoma dziennikami opóźnia się i wyświetla po 15-20 sekundach.

Jeśli mogę umieścić oświadczenie tosty [[Toast shared] showToast:self.view withText:@"You disabled your app from settings."]; z następującym obsługi realizacji:

[accountStore requestAccessToAccountsWithType:fbAcc options:dictFB completion:^(BOOL granted, NSError *error) { 
}]; 

Działa prawidłowo i wyświetla tosty terminowe nigdy opóźnień. Jakieś rozwiązanie, aby usunąć opóźnienie?

+1

Jestem zakładając, że requestAccess ... jest asynchronicznie pracy i showToast: jest praca UI, więc może trzeba jawnie wywołać showToast: w głównym wątku -jeżeli nie already-. – EDUsta

+1

@EDUsta Tak, nazwałem to w głównym wątku i działało dobrze. Dzięki –

Odpowiedz

1

Wierzę, że EDUsta powiedziała, że ​​jest poprawna. Spróbuj wywołać wiadomość toastową w głównym wątku. Wszystkie zmiany interfejsu użytkownika powinny być obsługiwane w głównym wątku, aby uniknąć dziwnych błędów. Spróbuj tego:

[accountStore requestAccessToAccountsWithType:fbAcc options:dictFB completion:^(BOOL granted, NSError *error) { 
     if (granted) { 
      NSLog(@"Perform fb registration"); 
     } else { 
      NSLog(@"Facebook 1”); 
        dispatch_async(dispatch_get_main_queue(), ^{ 
        [[Toast shared] showToast:self.view withText:@"You disabled your app from settings."]; 
      }); 
        NSLog(@"Facebook 2”); 
         } 

         }]; 
Powiązane problemy