app is crashing due to Assertion failure in -[FBSession checkThreadAffinity], 'FBSession: should only be used from a single thread'

StackOverflow https://stackoverflow.com/questions/22911458

  •  29-06-2023
  •  | 
  •  

Question

I am using facebook SSON in My application. When i am calling my method [self openSessionWithAllowLoginUI:NO]; Within the block, its crashing with the following error Message.

   *** Assertion failure in -[FBSession checkThreadAffinity], /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBSession.m:1571
  Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'FBSession: should only be used from a single thread'
  *** First throw call stack:
  (0x2f2c2fd3 0x39a42ccf 0x2f2c2ead 0x2fc6fd5b 0x407c27 0x4050a5 0x406ab1 0x405c43 0x40662d 0x39f2a833 0x39f2a81f 0x39f2a777 0x2f28d8f1 0x2f28c1c5 0x2f1f6f4f 0x2f1f6d33 0x340fb663 0x31b4216d 0x7fdc7 0x2f0c0)
 libc++abi.dylib: terminating with uncaught exception of type NSException

I know it says something like i am calling the FBSession from two or more threads, where as i should call it from a single thread but i am not getting where else i am calling this thread.

My Code for this is:-

-(void)facebook
{
ACAccountStore  *accountStore;
accountStore = [[ACAccountStore alloc]init];
ACAccountType *FBaccountType= [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:kFACEBOOK_APPID,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];
[accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:
 ^(BOOL granted, NSError *e) {
     if (granted)
     {
         NSArray *accounts = [accountStore accountsWithAccountType:FBaccountType];
         if ([accounts count] == 0) {
         }
         else{
             ACAccount *facebookAccount;
             NSLog(@"Facebook account Found");
             facebookAccount = [accounts firstObject];
             ACAccountCredential *facebookCredential = [facebookAccount credential];
             NSString *accessToken = [facebookCredential oauthToken];
             NSLog(@"Facebook Access Token: %@", accessToken);
             NSLog(@"facebook account =%@",facebookAccount);
         }
     }
     else
     {
         NSLog(@"error getting permission %@",e);
         [self openSessionWithAllowLoginUI:NO];
     }
 }];
}

But if i am not calling from with in the block its working fine, But I need to implement Facebook SSO directly from settings app for which it need to be called with in the block.

Without block I am calling it like this:-

-(void)facebook
{
ACAccountStore  *accountStore;
accountStore = [[ACAccountStore alloc]init];
ACAccountType *FBaccountType= [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:kFACEBOOK_APPID,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];
[self openSessionWithAllowLoginUI:NO];

}

Please let me know if you need more of the code.

Was it helpful?

Solution

Try do

dispatch_async(dispatch_get_main_queue(), ^{ 

   [self openSessionWithAllowLoginUI:NO]; 

}); 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top