要求:我的手表应用程序将显示我们的服务器的最新数据。手表应用程序和父iPhone应用程序之间的通信
我想:
要实现这个东西我用
WKInterfaceController.openParentApplication(requestDict, reply: { (returnedObject, error) -> Void in
if (returnedObject != nil) {
//loading interface data here
}
})
在我的应用程序委托功能我用
- (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应用程序在后台运行时,tch应用程序不显示任何内容。我调试它,发现实际上当iPhone应用程序正在运行的背景,然后webservice api调用(nsurlconnection)不是retuuning任何数据,当它来到前台,然后它的答复数据来观看应用程序。
为了解决这个问题,我使用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:
苹果文件说:在一个会话任务的
类型的NSURLSession类支持三种 类型的任务:数据任务,下载任务,并上传任务。
数据任务使用NSData对象发送和接收数据。数据任务是 ,旨在用于从您的应用到 服务器的简短交互式请求。数据任务可以在收到每条数据后一次将数据返回给您的应用程序,或者一次全部通过 完成处理程序返回。因为数据任务不会将数据存储到 文件中,所以它们在后台会话中不受支持。下载任务 以文件形式检索数据,并在应用程序未运行时支持后台下载 。上传任务发送数据(通常在文件的 格式),并支持后台上传,而应用程序不是 运行。
Apple告诉数据任务在后台不可用。而我的数据是可以使用数据任务获取的小型Web服务数据。所以我的服务电话不是下载任务。所以在iPhone应用程序是后台的情况下,应用程序将如何获取Web服务数据。
我们应该使用下载任务吗?但我想它是打算下载任何文件。
你可以试试这个:http://stackoverflow.com/questions/30000274/calling-parent-application-from-watch-app它适用于你的情况吗? – vomako