[英]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則從存儲中刪除。
然后,桌面會將自己的更改發送到設備。 由於設備上的所有對象都處於無狀態,因此不存在沖突。 桌面上的對象進入狀態無或從存儲中刪除,同步結束。
根據設備/桌面狀態,有兩種類型的可能沖突:
如果為每個字段保留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.