要求:我的手錶應用程序將顯示我們的服務器的最新數據。手錶應用程序和父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