手表应用程序和父iphone应用程序之间的通信

时间:2015-05-07 01:28:59

标签: ios watchkit apple-watch

要求:我的观看应用会显示来自我们服务器的最新数据。

我试过了:

为了实现这个,我用了

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服务数据。

我们应该使用下载任务吗?但我想这是打算下载任何文件。

2 个答案:

答案 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应用程序当前没有运行。