领域反向关系支持使用字典值创建
Realm inverse-relationships support for creation with a dictionary value
我想实现 Realm inverse-relationships 对创建字典的支持。
但是断言失败:没有创建字典中的狗。
import RealmSwift
class Dog: Object {
dynamic var name: String?
dynamic var owner: Person?
}
class Person: Object {
dynamic var name: String?
let dogs = LinkingObjects(fromType: Dog.self, property: "owner")
}
func sample() -> Person? {
// Get the default Realm
let realm = try? Realm()
let sampleValue: [String: Any] = ["name": "Harry", "dogs": [["name": "Belle"]]]
var person: Person? = nil
try? realm?.write {
person = realm?.create(Person.self, value: sampleValue, update: false)
}
assert(person?.dogs.isEmpty == false)
return person
}
注意:RealmSwift (2.1.2)
我发现的解决方法是分别创建每个实体。
try? realm.write {
person = realm.create(Person.self, value: sampleValue, update: false)
let dogsValue = sampleValue["dogs"] as? [[String: Any]]
dogsValue?.forEach {
var dogValue = [=10=]
dogValue["owner"] = person
realm.create(Dog.self, value: dogValue, update: false)
}
}
我希望有一些更简单的方法。
LinkingObjects
是一种查找机制,而不是 on-disk 商店的实际表示。因此,无法通过写入事务向其中插入数据。
但是,如果您重新设计架构,那么 Person
的 List
为 Dog
objects,并且 Dog
本身定义了 LinkingObjects
来确定它的 parents,那么你在同一个字典中插入 Person
和 Dog
的代码应该可以工作。 :)
class Dog: Object {
dynamic var name: String?
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}
class Person: Object {
dynamic var name: String?
let dogs = List<Dog>()
}
我想实现 Realm inverse-relationships 对创建字典的支持。
但是断言失败:没有创建字典中的狗。
import RealmSwift
class Dog: Object {
dynamic var name: String?
dynamic var owner: Person?
}
class Person: Object {
dynamic var name: String?
let dogs = LinkingObjects(fromType: Dog.self, property: "owner")
}
func sample() -> Person? {
// Get the default Realm
let realm = try? Realm()
let sampleValue: [String: Any] = ["name": "Harry", "dogs": [["name": "Belle"]]]
var person: Person? = nil
try? realm?.write {
person = realm?.create(Person.self, value: sampleValue, update: false)
}
assert(person?.dogs.isEmpty == false)
return person
}
注意:RealmSwift (2.1.2)
我发现的解决方法是分别创建每个实体。
try? realm.write {
person = realm.create(Person.self, value: sampleValue, update: false)
let dogsValue = sampleValue["dogs"] as? [[String: Any]]
dogsValue?.forEach {
var dogValue = [=10=]
dogValue["owner"] = person
realm.create(Dog.self, value: dogValue, update: false)
}
}
我希望有一些更简单的方法。
LinkingObjects
是一种查找机制,而不是 on-disk 商店的实际表示。因此,无法通过写入事务向其中插入数据。
但是,如果您重新设计架构,那么 Person
的 List
为 Dog
objects,并且 Dog
本身定义了 LinkingObjects
来确定它的 parents,那么你在同一个字典中插入 Person
和 Dog
的代码应该可以工作。 :)
class Dog: Object {
dynamic var name: String?
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}
class Person: Object {
dynamic var name: String?
let dogs = List<Dog>()
}