首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在苹果手表发出通知后异步加载数据

在苹果手表发出通知后异步加载数据
EN

Stack Overflow用户
提问于 2015-11-30 09:58:52
回答 1查看 178关注 0票数 1

我正在收到一个通知,其中包括它的有效负载中有一个ID。这个ID就在那里,这样我就可以在服务器上获取实际的对象。

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

使用它,如果我不打任何webservice电话,那就没问题了。一旦我试图调用服务器,就会发现一个错误,即父应用程序从不调用reply()

所以很明显,我认为异步调用会使它失败。

实现这一目标的最佳方法是什么?我有一种感觉,我做错了,但我没有其他真正的解决方案,从我发现的网上。

现在它看起来像这样

  1. 收到远程监视通知
  2. 在字典中使用ID监视开放式父应用程序
  3. 父调用webservice (此处失败)
  4. 父级将结果发送到手表(一些字符串和图像)

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

EN

回答 1

Stack Overflow用户

发布于 2015-11-30 10:12:04

在同样的情况下,希望以下能对你有所帮助。因此,当watchkit应用程序调用主应用程序时,开始后台任务,加载正在加载的内容,并结束bg任务。如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
- (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];
    } );
}

希望这是有用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33995796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档