簡體   English   中英

在Mac和iPhone之間同步Core Data模型

[英]Syncing Core Data model between Mac and iPhone

我目前正在構建我的Core Data模型,我希望在我的應用程序的Mac和iPhone版本之間進行同步。

我將使用Bonjour進行設備發現等,但我對問題的數據同步部分有疑問。

到目前為止,我已經為每個將參與同步的對象添加了UID和修改時間戳,因此我應該能夠匹配對象並檢測哪些對象已經更改。

是否有關於為這種情況編寫同步代碼的良好鏈接,資源,即在模型的兩個實例之間同步記錄?

同步是一個問題,有很多邊緣情況,過去人們已經解決了很多次,所以我期待找到關於這個主題的一些信息,但我能找到的只是Apple的SyncServices的鏈接(它不存在於iPhone)和一些MS同步技術。

我真的在尋找一般理論,所以我自己可以實現它,不一定是現成的解決方案。

SyncML規范可能有所幫助,但它很難閱讀,顯然偏向於SyncML。

我必須為Task Coach實現這個,所以這里有一些想法:

修改標志就足夠了,時間戳實際上並沒有真正提供更多信息。 通常,我的對象處於以下狀態之一:

  • 沒有
  • 刪除
  • 改性

修改對象時發生以下轉換:

  • 無 - >修改
  • 新 - >新
  • 刪除 - >(不應該發生)
  • 修改 - >修改

以及刪除時的以下內容:

  • 無 - >已刪除
  • 新建 - >實際刪除(可能會從存儲中刪除)
  • 刪除 - >(不應該發生)
  • 修改 - >刪除

同步時,設備首先向桌面發送狀態不同於None的所有對象。 如果其中一個狀態為!=無,則桌面會要求用戶解決沖突。 在任何情況下,對象在設備上進入狀態None,或者如果狀態為Deleted則從存儲中刪除。

然后,桌面會將自己的更改發送到設備。 由於設備上的所有對象都處於無狀態,因此不存在沖突。 桌面上的對象進入狀態無或從存儲中刪除,同步結束。

根據設備/桌面狀態,有兩種類型的可能沖突:

  • 改性/刪除。 如果用戶選擇信任該設備,則將桌面對象替換為設備對象; 否則,桌面不會執行任何操作並保持已刪除狀態,以便在第2階段將對象從設備中刪除。
  • 刪除/修改:如果設備獲勝,則實際從桌面刪除該對象。 否則,對象將進入桌面狀態New,以便在階段2中在設備上恢復。
  • 刪除/刪除:Duh。 只需將其從存儲中刪除即可
  • 修改/修改:用戶可以逐個字段地決定要保留哪些值。 狀態在桌面上保持為“已修改”,以便在第2階段將這些選項傳播回設備。

如果為每個字段保留Modified狀態,則可以避免某些沖突,例如,設備上具有已修改Subject的對象和桌面上已修改的Summary將不會觸發沖突。

您可以查看Task Coach的代碼示例(SourceForge上的SVN存儲庫,它同時包含Python中的桌面應用程序和iPhone應用程序)。 實際上,在這種情況下,我決定使用更簡單的方法; 我沒有跟蹤桌面上的狀態。 在第1階段(設備到桌面)之后,我只需用桌面上的對象完全替換設備上的對象。 因此,沒有沖突(設備總是贏)。

顯然,這僅適用於兩個固定設備之間; 如果要與多個電話/桌面應用同步,則必須為每個應用分配唯一的ID,並為不同的設備/應用保留不同的狀態。 這可能會變得毛茸茸。

HTH

Marcus Zarra創建了一個名為ZSync的框架,以簡化iPhone / iPad應用程序與Mac同行的同步。 看看它,它可能有助於解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM