Swift Realm:无法使用主键

时间:2015-08-31 12:39:39

标签: swift realm

enter image description here

根据Realm的要求,用户的类型为Object。如果我使用

let userObject = Users()
self.realm.add(userObject, update: true)

然后没有错误,但它会覆盖我的对象。我为更新对象的子集做错了什么?

更新: -

尝试了建议的解决方案

enter image description here

2 个答案:

答案 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(...)
}