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...
});
}
我的 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...
});
}