2015-07-22 65 views
1

上午同步試圖實現與本地核心數據堆棧cloudkit同步,我有幾個疑點如下獨特的領域,而與本地核心數據緩存

  1. 我需要一張桌子有其他獨特的領域然後是CKRecordID字段。那麼我怎麼能做到這一點?在插入cloudkit之前進行手動檢查過程太麻煩。

  2. 如果雲套件中存在子記錄,則防止刪除父記錄。 說明:假設我有兩臺設備都與雲一起同步到父記錄的單個子項,現在設備1插入該父項的子記錄並與雲套件同步,設備2刪除該特定父項,現在當設備2同步與雲,它會自動刪除父母和新插入的孩子。我想實現的是,如果一個新的子項存在於雲中的父項中,那麼在設備2同步時,父記錄不能被刪除,而是獲得父項以及新的子項記錄。

注意:使用私有數據庫和自定義區域。

任何建議是最受歡迎的。在此先感謝

回答

0

當你開始雲套件之間同步核心數據從父實體啓動它,然後同步子實體。

當設備1與雲套件同步時,子記錄將被同步。

當設備2將同步然後從雲套件的核心數據刪除之前,你必須檢查以下情況: -

  1. 如果家長從本地刪除,並與雲套件同步,然後首先檢查是否有云工具包上父母實體的任何子實體,如果可用,則不要將其從本地核心數據中刪除。

(注: - 之前刪除雲套件或核心數據,你必須先檢查任何父母有沒有從它的相反側的任何新的子)

0

你說的私有數據庫,則應該使用CloudKit CoreData,這正是它設計的場景。

公共數據庫是一個不同的故事。

0
  1. 您可以使用調用此方法來生成自己的UUID,然後可以作爲記錄ID使用。

    令UUID = CFUUIDCreateString(零,CFUUIDCreate(無))

  2. 你必須創建指向向後引用。所以你不會把這個在父RECORD填充的參考,然後用它創建一個孩子;

您可以創建具有此ID的父母和指向孩子們給它

如果父母被刪除這樣的話,是孩子不[假設你選擇該選項]。但如果孩子被刪除,父母仍然保留。

這裏有一些Swift 2.0代碼將它們放在一起,這裏的newRecord是一個CKRecord,該鏈接是一個參考字段。您在創建子記錄時使用的代碼。

uniqReference = NSUUID().UUIDString 
let singleLink2LinkthemALL = CKRecordID(recordName: uniqReference) 
let theLinkRef = CKReference(recordID: singleLink2LinkthemALL, action: .DeleteSelf) 
newRecord2.setObject(theLinkRef, forKey: "theLink") 

我強烈懷疑;我還沒有測試過,如果你有一個有兩個向後引用兩個不同父記錄的子記錄,即使其中一個父母被刪除,它也會保留。