2015-05-07 138 views
1

要求:我的手表应用程序将显示我们的服务器的最新数据。手表应用程序和父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服务数据。

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

+0

你可以试试这个:http://stackoverflow.com/questions/30000274/calling-parent-application-from-watch-app它适用于你的情况吗? – vomako

回答

2

您需要在iPhone应用程序中创建后台任务,否则操作系统会在完成下载数据之前关闭应用程序。以下是一些帮助文档:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

你会想使用'beginBackgroundTaskWithName:expirationHandler:'。这里的文档:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instm/UIApplication/beginBackgroundTaskWithName:expirationHandler: – bgilham

+0

这里是一个代码示例:http://stackoverflow.com/questions/30000274/calling-parent-application-from-watch-app – vomako

0

自从之前发布的问题发生了很大的变化。 openParentApplication在WatchOS 2中不再可用。另外,现在可以直接在手表上实现更多功能,以根据需要更新服务器中的数据。理想情况下,iPhone应用程序也将通过最新的缓存数据缓存WatchKit应用程序扩展,同时通过现有的新通信机制之一,以便WatchKit应用程序可以显示某些内容,直到下载最新的数据,即使iPhone应用程序目前没有运行。

相关问题