2015-01-07 36 views
8

我對如何最好地保存包含CloudKit中其他對象數組的對象感到困惑。保存CloudKit中的對象數組

說我有一個todo list應用程序,它具有不同的項目集合。我將如何去保存/提取一整套物品?

我有一個記錄類型的集合,它將有一個名爲「Name」的字符串屬性,然後是一個名爲「Items」的引用列表屬性?

由於CloudKit從子對象引用父對象,我知道Record類型的Item需要有一個名爲「Collection」的引用屬性。

我已經通過項目的所有實例設法挽救一個集合,而不項目的任何實例用下面的代碼

func addCollection(collection: Collection!, completion: (error: NSError!) ->()) { 
    if collection == nil 
     return 
    } 
    let collectionRecord = CKRecord(recordType: "Collection") 
    CollectionRecord.setObject(collection.name, forKey: "Name") 
    privateDB.saveRecord(collectionRecord) { 
     record, error in 
     dispatch_async(dispatch_get_main_queue()) { 
      completion(error: error) 
     } 
    } 
} 

另一種選擇保存集合時,循環也保存這些個人,他們的引用屬性到集合在CloudKit端進行連接,但這看起來好像太多網絡調用。

回答

2

對於Item記錄,您需要CKReferenceCollection。然後你就可以設置一個CKReferenceAction。您無需在Collection上創建CKReference列表。

有CKReference對象的列表,只有當你打算使用CKReferenceAction.None這將意味着沒有兩個recordTypes之間的嚴格關係的選項

如果你有Collection對象,那麼你就可以很容易地使用謂詞檢查Item recordType,該謂詞檢查CKReference是否爲Collection

通常不需要保存多個記錄。一旦你創建了一個帶有項目的集合,關係可以保持不變。如果您確實需要更改多個記錄,那麼您可以嘗試使用支持在一個操作中保存多個項目的CKModifyRecordsOperation

當連接現有Item recordTypes到Collection,你需要保存每個Item,因爲它有一個CKReference到CollecionItem已更改,因此必須保存。

+0

如何保證集合中物品的順序?恐怕在提取物品時,它們會以與保存時不同的順序到達...... –

+0

您可以添加如下排序順序:query.sortDescriptors = [NSSortDescriptor(key:「creationDate」,升序:假)] –

+0

是的,但我需要保持由用戶設置數組的順序,而不是每次我獲取數組時應用排序。 –