要求:我的观看应用会显示来自我们服务器的最新数据。
我试过了:
为了实现这个,我用了
WKInterfaceController.openParentApplication(requestDict, reply: { (returnedObject, error) -> Void in
if (returnedObject != nil) {
//loading interface data here
}
})
在我的app委托函数中,我使用了
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
// doing web service call using asynchronous nsurlconnection and replying with response dictionary
}
问题: 问题是,当iPhone应用程序处于前台时,应用程序运行正常,但当iPhone应用程序在后台运行时,观看应用程序不显示任何内容我调试了它,发现实际上当iPhone应用程序运行后,然后webservice api调用(nsurlconnection)没有重新调整任何数据,当它来到前台然后它回复数据观看应用程序。
要解决这个问题,我使用nsuserdafults存储数据,但问题是它并不总是显示最新数据。考虑用户打开的监视应用程序,它将转到父应用程序并从userdafults返回旧数据。
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
if ([userInfo[@"type"] isEqualToString:@"list"]) {
[self fetchWatchData];//it will get and store data when app will be foreground
NSDictionary *replyDict = [UtiltiyManager getWatchData];//data from userdefaults
if (replyDict) {
reply(replyDict);
}else {
NSDictionary *noDataDict = @{@"data":@"nodata"};
reply(noDataDict);
}
}
}
问题是手表应用程序在后台无法从iphone获取最新数据。由于没有服务调用api,它将在后台运行。我检查过NSURLConnection和NSURLSessionDataTask都是前台api调用。
任何解决方案或想法?
更新1:
Apple Docs说:
任务类型在会话中,NSURLSession类支持三种 任务类型:数据任务,下载任务和上传任务。
数据任务使用NSData对象发送和接收数据。数据任务是 用于从您的应用程序到的简短,通常是交互式请求 服务器。数据任务可以一次一个地将数据返回到您的应用程序 收到每个数据后,或者一次性通过一个数据 完成处理程序因为数据任务不会将数据存储到 文件,后台会话不支持它们。下载任务 以文件的形式检索数据,并支持后台下载 而应用程序没有运行。上传任务发送数据(通常在 文件的形式),并支持后台上传,而不是应用程序 运行
Apple告诉数据任务在后台不可用。我的数据是可以使用数据任务获取的小型Web服务数据。所以我的服务电话不是下载任务。因此,如果观看iPhone应用程序是后台,那么应用程序将如何获取Web服务数据。
我们应该使用下载任务吗?但我想这是打算下载任何文件。
答案 0 :(得分:2)
您需要在iPhone应用程序中创建后台任务,否则操作系统会在您完成下载数据之前关闭您的应用程序。以下是一些可以提供帮助的文档:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
答案 1 :(得分:0)
自从之前发布的问答以来,情况发生了很大变化。 WatchOS 2中不再提供openParentApplication
。另外,现在可以直接在手表上实现更多功能,以根据需要从服务器更新数据。理想情况下,iPhone应用程序还将通过现有的一种新通信机制同时缓存WatchKit App Extension和最后一个缓存数据,以便WatchKit App可以显示,直到下载最新数据,即使iPhone应用程序当前没有运行。