2015-01-07 5 views
8

CloudKit内に他のオブジェクトの配列を含むオブジェクトを最適に保存する方法が混乱しています。CloudKitでオブジェクトの配列を保存する

私はアイテムのコレクションが異なるToDoリストアプリがあります。アイテムのコレクション全体を保存/取得するにはどうすればいいですか?

「名前」という文字列属性と「アイテム」という参照リスト属性を持つレコード型のコレクションはありますか?

私は、CloudKitが子オブジェクトからその親を参照する方法のため、レコード型の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) 
     } 
    } 
} 

他のオプションは、コレクションを保存しているとの項目のいずれかのインスタンスなしにコレクションを保存するために管理し、また、個別にそれらを保存してきた彼らReference AttributeをCollectionに追加すると、CloudKit側で接続が行われますが、これはあまりにも多くのネットワークコールのようです。

答えて

2

Itemレコードの場合はCKReferenceCollectionが必要です。あなたはその上にCKReferenceActionを設定することができます。 CollectionCKReferenceリストを作成する必要はありません。 CKReferenceオブジェクトのリストを持って

あなたは、あなたが簡単にできる、あなたがCollectionオブジェクトを持っている場合は2 recordTypes

間の厳密な関係が存在しないことを意味し、どのCKReferenceAction.Noneを使用することを計画している唯一のオプションですCKReferenceがCollectionのものであるかどうかを確認する述部を使用して、Item recordTypeを照会します。

通常、複数のレコードを保存する必要はありません。アイテムを含むコレクションを作成すると、関係は変更されません。複数のレコードを変更する必要がある場合は、CKModifyRecordsOperationを使用して試すことができます。これは、複数の項目を1つのアクションに保存する機能をサポートしています。 CollectionItem recordTypesを既存リンクする際

は、あなたはそれがCollecionにCKReferenceを持っているので、各Itemを保存する必要があります。 Itemが変更されたため、保存する必要があります。

+0

コレクションのアイテムの順序をどうやって保証しますか?私は、アイテムを取得するときに、保存されたときとは異なる順序で到着することに気づいています... –

+0

このような並べ替え順序を追加することができます:query.sortDescriptors = [NSSortDescriptor(key: "creationDate" false)] –

+0

はい、配列の順序をユーザーが設定したままにしておく必要があります。配列を取得するたびにソートを適用しないでください。 –

関連する問題