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