J'ai un objet Personne avec beaucoup de chiens. L'application a une page séparée où elle montre seulement les chiens et une autre page où elle montre les chiens de la personne
Mon modèle est le suivant
class Person: Object {
dynamic var id = 0
let dogs= List<Dog>()
override static func primaryKey() -> String? {
return "id"
}
}
class Dog: Object {
dynamic var id = 0
dynamic var name = ""
override static func primaryKey() -> String? {
return "id"
}
}
J'ai des personnes stockées dans Realm. La personne a une page de détail où nous allons chercher et montrer ses chiens. Si le chien existe déjà, je mets à jour les dernières informations pour ce chien et l'ajoute à la liste des chiens d'une autre personne, sinon je crée un nouveau chien, l'enregistre et l'ajoute à la liste des personnes. Cela fonctionne en coredata.
// Fetch and parse dogs
if let person = realm.objects(Person.self).filter("id =\(personID)").first {
for (_, dict): (String, JSON) in response {
// Create dog using the dict info,my custom init method
if let dog = Dog(dict: dict) {
try! realm.write {
// save it to realm
realm.create(Dog, value:dog, update: true)
// append dog to person
person.dogs.append(dog)
}
}
}
try! realm.write {
// save person
realm.create(Person.self, value: person, update: true)
}
}
En essayant de mettre à jour une personne avec ses chiens, le royaume lève une exception Impossible de créer un objet avec la valeur de clé primaire existante
Nous n'avons plus besoin de la méthode de TiM.
Utilisez add(_:update:)
.
try realm.write {
realm.add(objects, update: Realm.UpdatePolicy.modified)
// OR
realm.add(object, update: .modified)
}
Enumérations Realm.UpdatePolicy:
error (default)
modified //Overwrite only properties in the existing object which are different from the new values.
all //Overwrite all properties in the existing object with the new values, even if they have not changed
NB: Fonctionne sur Realm Swift 3.16.1