使用[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions](semaphore_wait_slow陷阱)解析自Facebook 4.0.x以来的登录挂起

Smi*_*key 7 objective-c parse-platform pfuser pffacebookutils bftask

自从更新Facebook到v4.0.x和最新的Parse库以来,我的应用程序正在挂起,似乎在尝试登录用户时.

我的堆栈跟踪如下所示:

在此输入图像描述

我之前遇到过类似的问题,在这里回答:调用[PFFacebookUtils initializeFacebook]时解析崩溃 - semaphore_wait_trap

然而,该解决方案不再有效,因为它似乎[PFUser currentUser]已被替换,[PFUser(Private) _getCurrentUserWithOptions:]并且[BFTask(Private) waitForResult:withMainThreadWarning:]它被卡住了.

在我的应用程序中,我将PFUser子类化为一个名为MPLUser的类,并重写了用户方法.不确定这可能与问题有关吗?

+ (MPLUser *)user
{
    return (MPLUser *)[PFUser user];
}
Run Code Online (Sandbox Code Playgroud)

一旦开始发生,就无法启动应用程序.但是,我通常设法在锁定开始之前启动应用程序几次.它通常发生在崩溃之后...

我正在使用pod'ParseFacebookUtilsV4'并将所有库更新到最新版本.

更新:

这是来自另一个线程的更多堆栈跟踪,似乎正在尝试登录:

在此输入图像描述 在此输入图像描述

我按以下顺序初始化Parse和Facebook.如果我拨打电话,它会崩溃:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self initDefaults];
    [self initialiseApplicationSpecifics];
    [self setupParseWithOptions:launchOptions];
    [self enableCrashReporting];
    [self setupIAPs]; 
//etc... 
}


- (void)initialiseApplicationSpecifics
{
    [Flurry setCrashReportingEnabled:YES];
    [self registerParseSubclasses];
    [ParseCrashReporting enable];
    [Parse enableLocalDatastore];
#ifdef MPL
    [Parse setApplicationId:@"xxxyyy"
                  clientKey:@"xxxyyy"];
    [Flurry startSession:@"xxxyyy"];
#elif MGM
    [Parse setApplicationId:@"yyyxxx"
                  clientKey:@"yyyxxx"];
    [Flurry startSession:@"yyyxxx"];
#endif
}

- (void)setupParseWithOptions:(NSDictionary *)launchOptions
{
    [PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];
    [PFTwitterUtils initializeWithConsumerKey:@"aaaabbbb"
                               consumerSecret:@"bbbbaaaa"];
    [PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
}
Run Code Online (Sandbox Code Playgroud)

Lir*_*ron 2

似乎已通过 parse 1.7.2 修复

\n\n

根据 v1.7.2 \xe2\x80\x94 2015 年 4 月 27 日

\n\n
\n

新增内容:扩展和 WatchKit 的本地数据共享。\n 改进了 ParseFacebookUtils 的可为空注释。
\n 已修复:在主线程上未调用带有块回调的 logOutInBackground。\n 已修复:使用 PFSubclassing.h 的导入可能会出现编译错误。
\n 已修复:如果通过 saveEventually 保存自动用户,则不是持久的 currentUser。
\n 已修复:使用 ParseFacebookUtils 和 currentUser 时出现罕见的死锁情况。
\n 已修复:将连续多个对象固定到同一引脚的罕见问题。
\n 已修复:用户无法与 Facebook 链接的罕见情况。
\n 改进了本地数据存储的性能和可靠性。\n 性能改进。
\n 其他小错误修复。

\n
\n