2015-11-30 44 views
1

我收到一个通知,其中包含有效负载中的ID。这个ID就在那里,所以我可以获取服务器上的实际对象。在苹果手表上发出通知后异步加载数据

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

使用这个,如果我没有做任何web服务调用,这一切都很好。一旦我尝试调用服务器,我收到一个错误消息,说父应用程序从不调用reply()

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

达到此目的的最佳方法是什么?我有一种感觉,我做错了,但我没有从网上找到的其他真正的解决方案。

现在它看起来像收到此

  1. [观看]远程通知
  2. [观看]在字典ID
  3. [家长]调用Web服务(这里无法)打开父应用
  4. [Parent]发送结果到手表(部分字符串和图像

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

+0

看到你的代码真的很有用,特别是在'HandleWatchKitExtensionRequest'中。 –

回答

2

处于非常相同的情况,希望以下将帮助你。因此,当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]; 
    }); 
} 

希望这是有用的。