【发布时间】:2015-12-07 08:30:28
【问题描述】:
我在避免重复写入领域数据库的数据方面存在一些问题。我有以下对象模型
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 未重新创建人员数据,这按我的预期工作,但狗的名字不断重复。所以我的问题是,如果人没有被覆盖,为什么还要添加狗名,我哪里做错了?
【问题讨论】:
-
那是因为 Dog 没有主键,因此会阻止您在每次要更新人时创建一个 dog 对象。
-
谢谢回复!那么考虑到 json 文件没有狗的主键,你对解决这个问题有什么建议吗?
-
当然,请找到答案。您将需要检查人是否存在,如果存在,请不要创建和添加狗。