根据Realm的要求,用户的类型为Object。如果我使用
let userObject = Users()
self.realm.add(userObject, update: true)
然后没有错误,但它会覆盖我的对象。我为更新对象的子集做错了什么?
更新: -
尝试了建议的解决方案
答案 0 :(得分:0)
您需要为对象指定主键,以便可以唯一标识每个对象。请查看文档的以下部分,了解如何设置主键:
https://realm.io/docs/swift/latest/#primary-keys
我使用了您提供的示例项目并修改了以下代码(请注意,这是针对Xcode 7 beta 6和Swift 2.0)并且它可以正常工作而没有任何错误或问题:
do {
let realm = try Realm()
try realm.write {
realm.create(Users.self, value:["userEmail":"test@test.com", "name":"Test User"], update:true)
realm.create(Users.self, value:["userEmail":"another@test.com", "name":"Another"], update:true)
}
} catch {
NSLog("Realm error")
}
答案 1 :(得分:0)
由于使用add
需要传递独立对象,因此无法确定要覆盖哪些属性 - 使用带有字典的create
确实是执行此操作的正确方法。为了消除错误的编译器错误,您可能希望向块添加_ =
,这将修复类型推断。
例如,
realm.write {
_ = realm.create(...)
}