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
10
A
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
Problemi correlati
- 1. Evita di aggiungere tag html
- 2. Evita il riferimento circolare nel modello di dominio
- 3. Come aggiungere il supporto del dominio incrociato al servizio WCF
- 4. Elenco con oggetti ripetuti - Quanto costa la memoria?
- 5. Modellazione del dominio, oggetti del dominio in DDD
- 6. modello di dominio anemico rispetto al modello di dominio
- 7. Evita di aggiungere nuovamente il ricercatore per regione per dichiarazione
- 8. Letsencrypt aggiunge dominio al certificato esistente
- 9. Accesso al dominio dell'app predefinito
- 10. Distribuisci meteor al proprio dominio
- 11. Assegna il nome di dominio al contenitore
- 12. Grails: più relazioni tra due oggetti dominio
- 13. JAXB associazione xjc a oggetti dominio esistenti
- 14. Come aggiungere la business logic al servizio di dominio in Domain-Driven-Design?
- 15. Funzione C++ associare argomenti ripetuti alla funzione al curry
- 16. Generazione di DTO e mapper da oggetti di dominio
- 17. Classe di base astratta per tutti gli oggetti entità dominio
- 18. Come ridurre la duplicazione di oggetti dominio/entità/DTO?
- 19. Associazione JSON a oggetti di dominio Grails nidificati
- 20. Aggiungere oggetti a una matrice di oggetti in PowerShell
- 21. Come assegnare un nome di dominio al server node.js?
- 22. Evita la conversione da rbind()/cbind() da numerico al fattore
- 23. Come utilizzare re per trovare caratteri ripetuti e ripetuti
- 24. Aggiunta di oggetti fittizi al progetto
- 25. Modello di dominio anemico e modello di dominio in un semplice progetto basato sul dominio
- 26. Eventi ripetuti nell'API Eventbrite
- 27. MySQL Group_Concat Valori ripetuti
- 28. Regex per corrispondere al dominio semplice
- 29. Come interrompere il reindirizzamento al dominio personalizzato?
- 30. Espressione regolare - Gruppi ripetuti
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) –
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
http://realm.io/docs/cocoa/ 0.90.6/api/Classes/RLMObject.html # // api/name/createOrUpdateInDefaultRealmWithObject: – yoshyosh