应用程序崩溃,因为断言失败 – ,'FBSession:应该只能从单个线程使用'

我在我的应用程序中使用Facebook的SSON。 当我打电话给我的方法[self openSessionWithAllowLoginUI:NO]; 在块内,它与下面的错误消息崩溃。

*** 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 

我知道它说,就像我从两个或更多的线程调用FBSession,因为我应该从一个线程调用它,但我没有得到我要调用此线程的地方。

我的代码是:

 -(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]; } }]; } 

但是,如果我不是从块中调用它的工作正常,但我需要实现Facebook SSO直接从设置应用程序,它需要在块中调用。

没有障碍,我这样称呼它:

 -(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]; } 

请让我知道如果你需要更多的代码。

试试看

 dispatch_async(dispatch_get_main_queue(), ^{ [self openSessionWithAllowLoginUI:NO]; });