2015-01-07 6 views
8

Sono confuso su come salvare al meglio un oggetto che contiene una serie di altri oggetti in CloudKit.Salvataggio di una matrice di oggetti in CloudKit

Dire che ho una app di elenco di cose da fare, che ha diverse raccolte di articoli. Come faccio a salvare/recuperare un'intera collezione di oggetti?

Avrei un tipo di record di raccolta, che avrebbe un attributo di stringa chiamato "Nome" e quindi un attributo di elenco di riferimento denominato "Elementi"?

So che il tipo di record di Item deve avere un attributo di riferimento chiamato "Collection", a causa di come i riferimenti CloudKit da un oggetto figlio al suo genitore.

sono riuscito a salvare una raccolta senza istanze della voce con il seguente codice

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) 
     } 
    } 
} 

L'altra opzione è quando si salva un Collection, a ciclo attraverso tutte le istanze di Item e anche salvare quelli singolarmente, la loro Attributo di riferimento alla raccolta che effettua la connessione sul lato CloudKit, ma sembra troppe chiamate di rete.

risposta

2

Per i record Item è necessario un CKReference per il Collection. Sarà quindi possibile impostare uno CKReferenceAction su quello. Non è necessario creare un elenco CKReference su Collection.

Avere una lista di oggetti CKReference è solo un'opzione quando si prevede di utilizzare CKReferenceAction.None Il che significa che non v'è una stretta relazione tra i due recordTypes

Se si dispone di un oggetto Collection, allora si può facilmente interrogare il recordType Item utilizzando un predicato che Verifica se CKReference è quello del Collection.

Generalmente non è necessario salvare più record. Una volta creata una raccolta con articoli, la relazione può rimanere invariata. Se è necessario modificare più record, è possibile provare a utilizzare lo CKModifyRecordsOperation che supporta il salvataggio di più elementi in un'unica azione.

Durante il collegamento esistente Item recordTypes ad un Collection, si ha bisogno di salvare ogni Item perché ha una CKReference al Collecion. Il Item è stato modificato, quindi deve essere salvato.

+0

Come si garantisce quindi l'ordine degli articoli nella raccolta? Ho paura che durante il recupero degli elementi, sarebbero arrivati ​​in un ordine diverso rispetto a quando sono stati salvati ... –

+0

È possibile aggiungere un ordinamento come questo: query.sortDescriptors = [NSSortDescriptor (chiave: "creationDate", crescente: false)] –

+0

Sì, ma ho bisogno di mantenere l'ordine dell'array impostato dall'utente, non applicare un ordinamento ogni volta che recupero l'array. –

Problemi correlati