Ios 在apple watch上发出通知后异步加载数据

Ios 在apple watch上发出通知后异步加载数据,ios,objective-c,xamarin,watchkit,apple-watch,Ios,Objective C,Xamarin,Watchkit,Apple Watch,我正在接收一个通知,该通知的有效负载中有一个ID。这个ID就在那里,所以我可以在服务器上获取实际的对象 现在,我只使用AppDelegateHandleWatchKitExtensionRequest和Watchkit中的.OpenParentApplication进行通信 使用它,如果我不打任何webservice电话,一切都很好。一旦我尝试调用服务器,我会收到一个错误,说明父应用程序从不调用reply() 显然,我认为异步调用会导致失败 实现这一目标的最佳方式是什么?我有一种感觉,我这样做是

我正在接收一个通知,该通知的有效负载中有一个ID。这个ID就在那里,所以我可以在服务器上获取实际的对象

现在,我只使用AppDelegate
HandleWatchKitExtensionRequest
和Watchkit中的
.OpenParentApplication
进行通信

使用它,如果我不打任何webservice电话,一切都很好。一旦我尝试调用服务器,我会收到一个错误,说明父应用程序从不调用
reply()

显然,我认为异步调用会导致失败

实现这一目标的最佳方式是什么?我有一种感觉,我这样做是错误的,但我没有其他真正的解决办法,从我在网上找到的

现在看起来像这样

  • [监视]收到远程通知
  • [查看]打开字典中ID为的父应用程序
  • [Parent]调用Web服务(此处失败)
  • [家长]向手表发送结果(一些字符串和图像)

  • 注意:我使用的是Xamarin,但任何Obj-C/Swift代码都足够了,而且我需要与WatchOS 1兼容,因此我不能真正使用WCSession/WatchConnectivity框架,可以吗?

    也遇到过同样的情况,希望下面的代码能对您有所帮助。因此,当watchkit应用程序调用主应用程序时,开始后台任务,加载正在加载的内容,然后结束bg任务。像这样:

    - (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
    {
    __block UIBackgroundTaskIdentifier watchKitHandler;
        watchKitHandler = [[UIApplication sharedApplication] beginBackgroundTaskWithName:@"backgroundTask"
                                                                       expirationHandler:^{
                                                                           watchKitHandler = UIBackgroundTaskInvalid;
                                                                       }];
    //load the things here.
    reply(@{@"hehe":@"hehe123"});
    dispatch_after( dispatch_time( DISPATCH_TIME_NOW, (int64_t)NSEC_PER_SEC * 10. ), dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
            [[UIApplication sharedApplication] endBackgroundTask:watchKitHandler];
        } );
    }
    

    希望这是有用的。

    查看您的代码会非常有用,尤其是在
    HandleWatchKitExtensionRequest
    中。