亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將iPhone核心數據與Web服務器同步,然后推送到其他設備?

如何將iPhone核心數據與Web服務器同步,然后推送到其他設備?

Smart貓小萌 2019-08-05 16:47:11
如何將iPhone核心數據與Web服務器同步,然后推送到其他設備?我一直在研究一種方法,用于在多個設備(如iPad或Mac)之間同步存儲在iPhone應用程序中的核心數據。在iOS上使用Core Data的同步框架并不多(如果有的話)。但是,我一直在考慮以下概念:對本地核心數據存儲進行更改,并保存更改。(a)如果設備在線,它會嘗試將變更集發送到服務器,包括發送變更集的設備的設備ID。(b)如果變更集未到達服務器,或者設備未聯機,則應用程序會將更改集添加到隊列中以在其聯機時發送。位于云中的服務器將其接收的特定更改集與其主數據庫合并。在云服務器上合并更改集(或更改集隊列)后,服務器會使用某種輪詢系統將所有這些更改集推送到向服務器注冊的其他設備。(我想使用Apple的推送服務,但顯然根據評論,這不是一個可行的系統。)我需要考慮什么花哨的東西嗎?我查看了REST框架,例如ObjectiveResource,Core Resource和RestfulCoreData。當然,這些都與Ruby on Rails一起使用,我并不依賴它,但它是一個開始的地方。我對我的解決方案的主要要求是:任何更改都應該在后臺發送而不會暫停主線程。它應該使用盡可能少的帶寬。我考慮過一些挑戰:確保服務器上附加了不同設備上不同數據存儲的對象ID。也就是說,我將有一個對象ID和設備ID表,它們通過對存儲在數據庫中的對象的引用來綁定。我將有一條記錄(DatabaseId [此表是唯一的],ObjectId [整個數據庫中的項目唯一],Datafield1,Datafield2),ObjectId字段將引用另一個表AllObjects:(ObjectId,DeviceId,DeviceObjectId)。然后,當設備推送更改集時,它將從本地數據存儲中的核心數據對象傳遞設備Id和objectId。然后我的云服務器將檢查AllObjects表中的objectId和設備ID,并找到要在初始表中更改的記錄。所有更改都應加上時間戳,以便合并它們。設備必須輪詢服務器,而不會耗盡太多電池。如果/從服務器收到更改,本地設備還需要更新內存中保存的任何內容。還有什么我在這里失蹤的嗎?我應該考慮哪些框架才能實現這一目標?
查看完整描述

3 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

我建議仔細閱讀并實施Dan Grover在iPhone 2009大會上討論的同步策略,這里可以作為pdf文檔獲得。

這是一個可行的解決方案,并不難實現(Dan在其幾個應用程序中實現了這一點),與Chris描述的解決方案重疊。有關同步的深入理論討論,請參閱Russ Cox(MIT)和William Josephson(普林斯頓)的論文:

與矢量時間對的文件同步

它同樣適用于核心數據,并有一些明顯的修改。這提供了整體更加強大和可靠的同步策略,但需要更多努力才能正確實施。

編輯:

似乎Grover的pdf文件不再可用(斷開鏈接,2015年3月)。更新:鏈接可在此處通過返回機器獲得

由于iCloud最終似乎支持正確的核心數據同步,因此被Marcus Zarra開發的名為ZSync的Objective-C框架已被棄用。


查看完整回答
反對 回復 2019-08-05
  • 3 回答
  • 0 關注
  • 720 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號