2014-01-07 70 views
0

我正在寫一個iOS 7應用程序,使用AFNetworking和REST Web服務將600條員工記錄載入SQLite數據庫。當應用程序第一次加載時,我檢查數據庫是否退出,如果它沒有複製空白的employee.db,然後調用Web服務並填充數據庫。這到目前爲止效果很好。添加後臺抓取到iOS7應用程序通過AFNetworking抓取網絡數據

現在我需要添加後臺提取服務,以便我可以定期更新數據。在如何這樣做方面有點不知所措。我知道我需要將這個能力添加到目標中,我已經完成了。需要編寫App Delegate方法setMinimumBackgroundFetchInterval。

然後,我可以寫在應用程序委託

這將是很簡單的打電話給我的方法清除數據庫,並回顧了Web服務的

performFetchWithCompletionHandler

方法。我認爲它會在30秒內完成。

這裏是我的問題:

  1. 有一些方法可以輕鬆地查看數據是否發生了變化?我想我可以只寫一個tmp數據庫然後比較SQL dbs,但這會花費太多時間嗎?也許jt無關緊要,如果我每天只檢查4次,說因爲數據幾乎可能會改變,只有一點點。

  2. 我很擔心我的方法在我完成之前就結束了。如果我的臨時文件沒有完成,不想殺掉當前的數據庫。也許我應該做臨時工,只有當我剩下足夠的時間時,例如> 1秒,然後刪除當前數據庫並將temp temp重命名爲當前名稱。

  3. 有沒有一種方法可以防止當我刪除舊的數據庫並將舊的重命名爲新的用戶可能訪問某些數據的可能問題?我需要暫停ui或類似的東西,但不知道如何。

我正在尋找任何方向或幫助在這裏,它將不勝感激!

布萊恩

回答

1

如果我這樣做,我有服務器發送時間戳,你會發回,以便服務器只需要發送自時間戳已經改變了數據的數據。這將解決你的第一個問題,即如何知道是否有任何改變。

然後,我會解析從您的服務器(可能)XML和更新數據庫,但最後一步是保存時間戳。

如果iOS在寫入時間戳之前終止了您的應用程序,那麼最糟糕的情況是下一次它會同步它將重新請求數據並嘗試重新應用它。

即不刪除舊的數據庫,並用新的數據庫替換它......增量執行。