2012-01-17 91 views
20

我設法讓我現有的核心數據應用程序與iCloud一起工作。經過幾天的研究,這實際上非常簡單。如此看來,三樣東西是必不可少的:核心數據iCloud合併協議

  • 添加一個權利文件(在最近的Xcode,這是可以做到使用選擇目標,選擇「摘要窗格」,向下滾動,選中Enable權利」

  • 添加標號正確的選擇,同時加入persisten店,在我的情況

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
        // other options 
        @"<arbitrary name>", NSPersistentStoreUbiquitousContentNameKey, 
        iCloudURL, NSPersistentStoreUbiquitousContentURLKey, 
        nil] 
    

    其中

    NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
    

這裏的`nil'表示使用來自Entitlements.plist文件的信息。

  • 通過開發人員門戶爲應用程序啓用iCloud支持。這可能涉及生成一個獨特的應用程序ID,這是我以前沒有做過的。

其實,目前我不確定這最後一步對開發是否至關重要---我已經啓用了另一個應用程序,沒有這最後一步,它似乎工作。無論如何,我已經注意到,不同iDevices上同一應用程序的兩個現有核心數據庫將同步新條目到核心數據堆棧,但不會自動同步現有記錄。

將數據從設備A同步到B的一種方法是刪除B上的現有核心數據庫,然後重新啓動B上的應用程序。但是,這不是合適的合併。

有沒有人知道在應用程序升級到使用iCloud支持時將不同應用程序中的兩個現有核心數據庫合併的方法,即使用上述選項和所有這些選項?

感謝

+0

也許你能在這個類似的問題 http://stackoverflow.com/questions/6588180/can-you-sync-coredata-with-icloud – 2012-01-23 23:42:58

+0

找到幫助從這裏開始 - https://devforums.apple.com/thread/126670 – 2012-01-30 10:18:58

+0

不,儘管Recipes應用程序包含有用的代碼(其中將商店添加到後臺的持久存儲協調器中 - 在合併大型核心數據時很有用數據庫)並沒有解決在兩個不同設備上合併兩個預先存在的核心數據實例的問題。我正在尋找一種以某種方式重放事務日誌的方式。 – davidav 2012-02-06 23:16:32

回答

1

我沒有做過,但保存到iCloud的時候有是如果數據也已更新,或存在其他設備上的矛盾的信息的高風險。如果衝突未得到妥善解決,則兩臺設備之間的流量將無法正常發揮。解決衝突可能很複雜,但最簡單的辦法就是讓最近的勝利。蘋果公司有衝突處理程序,當保存覆蓋到無處不在的商店時會觸發衝突處理。

+0

iCloud實現的核心數據實際上相當不錯,您通常不會在太多衝突中運行。也許如果你在兩個不同的實例中編輯同一個記錄,可能最後保存的記錄最終會佔上風。 – davidav 2012-02-06 23:18:08