gpt4 book ai didi

json - RealmSwift + 数据重复

转载 作者:可可西里 更新时间:2023-11-01 01:37:49 41 4
gpt4 key购买 nike

我在理解避免将数据重复写入 Realm 数据库方面遇到了一些问题。我有以下对象模型

Person.swift

class Person: Object {
let id = RealmOptional<Int>()
dynamic var name = ""
let dogs = List<Dog>()

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

狗.swift

class Dog: Object {
dynamic var name = ""
var owner: [Person] {
return linkingObjects(Person.self, forProperty: "dogs")
}

而Json数据是

{
"id": 1001,
"name": "Joe",
"dogs": ["Sally","Molly","Lucy"]
}

在将 json 数据解析为变量 - personId、personName 和 dogNameArray 之后,将这些数据发送到 saveFunc()

func saveFunc() {

do {
let newPerson = Person()
newPerson.id.value = personId
newPerson.name = personName

let newDog = Dog()
if dogNameArray.count > 0 {
for dog in dogNameArray {
newDog.name = dog
newPerson.dog.append(newDog)
}
}

let realm = try Realm()
realm.beginWrite()
realm.create(Person.self, value: newPerson, update: true)
try realm.commitWrite()

} catch {
print("create and updating error"
}

问题:数据是第一次按应有的方式创建,但随后重新启动应用程序,由于 primaryKey,人员数据没有重新创建,这按我的预期工作,但狗的名字不断重复。所以我的问题是,为什么人没有被覆盖,狗的名字仍然被添加,我哪里做错了?

最佳答案

我们可以确保,我们检查这个人是否已经存在,如果存在,就不要创建和添加狗:

func saveFunc() {

do {

let realm = try Realm()
if let person = realm.objectForPrimaryKey(Person.self, key: personId){
//Nothing needs be done.

}else {

//Create Person and dogs and relate them.

let newPerson = Person()
newPerson.id.value = personId
newPerson.name = personName

let newDog = Dog()
if dogNameArray.count > 0 {
for dog in dogNameArray {
newDog.name = dog
newPerson.dog.append(newDog)
}
}

let realm = try Realm()
realm.beginWrite()
realm.create(Person.self, value: newPerson, update: true)
try realm.commitWrite()
}


} catch {
print("create and updating error"
}

关于json - RealmSwift + 数据重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129268/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com