2015-02-27 19 views
10

Interrogo i dati da Parse.com e li salviamo nel database di Realm locale (iOS/swift). Ogni oggetto ha una proprietà unica (A) ma anche una proprietà potrebbe essere uguale (B). Qual è il modo più efficace per evitare di aggiungere oggetti con la stessa proprietà B nel database di autenticazione? Grazie in anticipo.Evita di aggiungere oggetti ripetuti al dominio

risposta

13

È possibile impostare una chiave primaria su un oggetto in modo che Realm garantisca l'esistenza di un solo oggetto nel DB.

class Person: RLMObject { 
    dynamic var id = 0 
    dynamic var name = "" 

    override class func primaryKey() -> String { 
     return "id" 
    } 
} 

Sarà comunque necessario verificare se tale oggetto si trova già nel DB o meno. Verrà recuperato l'oggetto in base alla chiave primaria (cercando gli oggetti tramite la proprietà (A) o la proprietà (B)). Quindi se l'oggetto esiste, non aggiungere, se non esiste, aggiungerlo al DB.

Qualcosa di simile a questo:

var personThatExists = Person.objectsWhere("id == %@", primaryKeyValueHere).firstObject() 

    if personThatExists { 
    //don't add 
    } else { 
    //add our object to the DB 
    } 

Se si utilizzano chiavi primarie e non si preoccupano dei valori dell'oggetto in fase di aggiornamento, è possibile utilizzare il metodo createOrUpdate. Realm creerà un nuovo oggetto, se uno non esiste, altrimenti si aggiornerà quella che esiste con i valori dall'oggetto si passa.

Spero che questo aiuti

+0

Grazie. Quindi ogni volta che aggiungo un nuovo oggetto al reame, imposto l'id uguale alla proprietà B (stringa) che seleziono da Parse. Se l'ID del nuovo oggetto è uguale a uno dell'ID oggetto esistente, reame restituisce un errore o semplicemente ignora l'aggiunta. Se restituisce un errore, come gestire la richiamata per saltare l'aggiunta? (Non ho trovato la funzione addObject in realm ha il blocco di callback) –

+1

Errore, non permettendoti di farlo. Correggere non c'è un blocco di callback. Dovresti creare il tuo metodo che esegue il controllo prima di aggiungere. Ho aggiunto un esempio al codice sopra. Un modo più semplice per farlo potrebbe essere quello di utilizzare createOrUpdate poiché si dispone di una chiave primaria. Realm creerà quindi un nuovo oggetto, se non esiste, o aggiornerà quello esistente con l'oggetto che si passa, quindi non è necessario effettuare alcun controllo su – yoshyosh

+0

http://realm.io/docs/cocoa/ 0.90.6/api/Classes/RLMObject.html # // api/name/createOrUpdateInDefaultRealmWithObject: – yoshyosh

Problemi correlati