2015-05-07 140 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應用程序目前沒有運行。

相關問題