WCSession didReceiveUserInfo 被调用,但 iPhone 应用停止后台运行 activity

WCSession didReceiveUserInfo gets called but iPhone app stops background activity

我的 watchOS 2 应用程序出现问题。我正在使用 [[WCSession defaultSession] transferUserInfo:request] 将数据字典传输到我的 iPhone 应用程序。

在 iPhone 应用程序的 AppDelegate.m 中,我实现了 -(void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo

当我从手表发送传输请求时,会调用此方法(由我创建的 NSLog 确认),但并非所有代码都被执行。更具体地说,它调用以下方法 post 到 Facebook,它也会被调用,但不会完全执行。

- (void)postToFacebook:(NSString*)postMessage {

NSLog(@"begin");

    if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"]) {

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/feed" parameters:@{@"message" : postMessage, @"privacy": @"{'value': 'SELF'}"}  HTTPMethod:@"POST"] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {

            NSLog(@"done");

        }];

    }

}
}

NSLog "begin" 已显示,但 NSLog "done" 未显示。

我已经测试了 运行 来自 iPhone 的方法,一切正常。但是当我尝试使用 transferUserInfo 从手表调用它时,它没有正确执行。

现在我的问题是,如何确保 iPhone 应用程序中的后台任务在该方法完全完成之前不会被终止。

有点远景,但尝试将代码打包到主队列中:

- (void)postToFacebook:(NSString*)postMessage {
    dispatch_sync(dispatch_get_main_queue(), ^{
        if ([[FBSDKAccessToken currentAccess...etc...
    });
}