我正在为不同的目的开发一个库,我遇到了一个我无法理解的FacebookSDK问题。我已经在我的库中封装了所有Facebook SSO登录过程,它完美地集成在我正在处理的应用程序中,与线程相关的一个小细节。如Facebook开发人员页面中的iOS SDK教程所示,我必须调用我app的AppDelegate中的appDidBecomeActive方法中的“handleDidBecomeActive”方法,但检查Facebook中已打开会话的一些内容,以便重定向(或不重定向)到Facebook Native iOS应用程序,Safari或其他任何方式:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if(//Notice that I can reveal code here, but checks if the session in Facebook is
opened){
[FBSession.activeSession handleDidBecomeActive];
}
}
在我的目标中思考这个库,并将其余的登录过程封装在我的库中,我通过调用我的封装方法封装了这些行:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[MyLibrarySingleton sharedInstance] handleDidBecomeActive];
}
显然,这个方法与第一个代码块中显示的Facebook会话检查和Facebook会话handleDidBecomeActive调用相同。出乎意料的是,第一种方法与我的库的其余部分完美配合,并集成在应用程序中。但第二种方式(封装在我的库中)使得FacebookSDK在内部检查你只能从一个线程访问FBSession对象的方法崩溃(这意味着,似乎封装的方法抛出了一个与当前线程不同的线程,即同样创建了FBSession对象并且工作正常)。我没有在流程中抛出任何新线程,只是更改第一个代码块中的代码,将其插入第二个代码块中显示的方法中。有任何想法吗??
谢谢!