我正在寫一個iPad應用程序,從Web服務器上的XML文件翻出各種座標,分析該信息,並呈現在屏幕上。從URL中不斷獲取新數據的最佳方法?
我在想,如果您有任何的對我怎麼可能有它不斷刷新數據,比如提示/建議,每一秒(因爲計算機程序更新每隔幾秒鐘的服務器上的XML文件)。謝謝!
我正在寫一個iPad應用程序,從Web服務器上的XML文件翻出各種座標,分析該信息,並呈現在屏幕上。從URL中不斷獲取新數據的最佳方法?
我在想,如果您有任何的對我怎麼可能有它不斷刷新數據,比如提示/建議,每一秒(因爲計算機程序更新每隔幾秒鐘的服務器上的XML文件)。謝謝!
你肯定會需要實現這種多線程後臺操作,或者您的應用程序將完全沒有反應。在繼續之前,我必須指出,不斷查詢服務器以查看應用程序的整個執行過程是一個糟糕的主意,它不僅會咀嚼數據,而且必須保持Wi-Fi/3G/4G天線不間斷運行,否則用戶的電池快得多。
我會考慮放寬要求,每隔10秒左右拉數據(因爲服務器只會每隔幾秒更新一次,並且必須考慮下載和呈現當前抓取的合作伙伴的時間) ,甚至等待用戶按下刷新按鈕等。
要回答這個問題,有幾種方法可以做到這一點,其中最簡單的方法可能是使用像這樣的框架(不再維護它儘管如此,對於現代化項目,還有像AFNetworking這樣的圖書館)。他們處理來自服務器的數據異步下載以及許多其他有用的網絡功能。
您需求的理想的過程看起來是這樣的:
performSelectorOnMainThread
或同等學額!)希望有所幫助!如果你不希望包括外部庫,我也有一個創建執行NSURLConnection的,並將其發送給NSOperationQueue,併發執行他們一個子類的NSOperation的情況下,一個小樣本項目。您可以輕鬆修改它,一次只執行一個操作,更改NSURLConnection以下載並解析服務器數據,然後更新主線程。 It's here如果你有興趣。
看一看NSTimer
及其scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
方法
一個可行的解決方案可能是
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:refreshData userInfo: nil repeats:YES ]
和方法的調用對象
-(void) refreshData {
//Do your call here
}
考慮發出推送通知設備在服務器上準備好新數據時。
這將節省設備的電源,節省服務器的負載TON,只有推壓通常需要一秒鐘左右,以供您使用延遲,所以到達也不錯。
唯一需要注意的是,如果用戶拒絕允許推送通知,您還必須實施某種輪詢。但對於他們來說,你可以有很長的輪詢週期,並告訴他們刷新會更快,如果他們啓用推支持...
優秀的建議。當前的實現在最初的概念驗證階段運行良好,但是當我重寫代碼時,我同意這是一條路。 – Chris 2012-07-13 19:08:00
爲什麼不使用'NSTimer'? – Imirak 2012-07-13 01:51:22
@Imirak是的,好像我將與NSOperation一起使用它。謝謝! – Chris 2012-07-13 04:11:44