たくさんの犬を飼っている人がいます。アプリには、犬だけを表示する別のページと、人の犬を表示する別のページがあります
私のモデルは次のとおりです
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"
}
}
Realmに人が保管されています。人は私たちが彼の犬をフェッチして表示する詳細ページを持っています。犬が既に存在する場合は、その犬の最新情報を更新して人の犬のリストに追加します。それ以外の場合は、新しい犬を作成して保存し、人のリストに追加します。これは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)
}
}
犬で人物を更新しようとすると、レルムが例外をスローします既存の主キー値でオブジェクトを作成できません
TiMの方法はもう必要ありません。
add(_:update:)
を使用します。
try realm.write {
realm.add(objects, update: Realm.UpdatePolicy.modified)
// OR
realm.add(object, update: .modified)
}
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
注意:レルムで機能しますSwift 3.16.1