如何在 Swift for Realm 模型中设置主键
Posted
技术标签:
【中文标题】如何在 Swift for Realm 模型中设置主键【英文标题】:How to set primary key in Swift for Realm model 【发布时间】:2014-11-26 22:28:23 【问题描述】:我在一个新的 ios Swift 项目中使用 Realm。我将 Xcode 6.0.1 与 iOS SDK 8.0 和 Realm 0.85.0 一起使用
我正在尝试使用新的 Realm 主键功能,以便我可以使用addOrUpdateObject
。
这是一个示例模型:
import Foundation
import Realm
class Foo: RLMObject
dynamic var id = 0
dynamic var title = ""
func primaryKey() -> Int
return id
以及我如何尝试添加/更新新对象:
let foo = Foo()
foo.title = titleField.text
foo.id = 1
// Get the default Realm
let realm = RLMRealm.defaultRealm()
// Add to the Realm inside a transaction
realm.beginWriteTransaction()
realm.addOrUpdateObject(foo)
realm.commitWriteTransaction()
我收到此错误:
RLMExecption',原因:''Foo' 没有主键,不能 更新了
这里是关于主键的文档。我可能没有正确设置它:
http://realm.io/docs/cocoa/0.85.0/api/Classes/RLMObject.html#//api/name/primaryKey
最新文档现在在这里: https://realm.io/docs/objc/latest/api/Classes/RLMObject.html#//api/name/primaryKey
【问题讨论】:
到 realm.io 文档的链接断开 在启动 Realm Swift 时,我们已将“cocoa”文档移至“objc”,因此请尝试使用此链接:realm.io/docs/objc/latest/api/Classes/RLMObject.html#//api/name/…我们正在设置旧链接的重定向,所以这不会在未来造成同样多的混乱。 从旧链接到新文档的重定向似乎不起作用,所以我用新链接更新了我的问题。 【参考方案1】:primaryKey
需要是返回主键属性名称的类函数,而不是返回主键值的实例方法。
@objcMembers class Foo: RLMObject
dynamic var id = 0
dynamic var title = ""
override class func primaryKey() -> String?
return "id"
【讨论】:
谢谢,是的,这些都是我的问题。此外,为了使其正常工作,我添加了“覆盖”来覆盖声明。 我已经更新了答案以包含 Realm 正确调用自定义类函数所需的“覆盖”关键字 由于某种原因,我收到“'primaryKey()' 的无效重新声明”错误。似乎无法弄清楚为什么。 @Entalpi 我更新了文档realm.io/docs/cocoa/0.89.2/#customizing-models,您仍然看到任何错误吗?如果您愿意,请随时在groups.google.com/forum/#!forum/realm-cocoa 上留言,并附上您的代码示例 根据@CherryKuczery,返回类型是可选的。如果我有足够的声誉,我会合并这两个答案。【参考方案2】:primaryKey()
的返回类型是可选的:
class Foo: RLMObject
dynamic var id = 0
dynamic var title = ""
override class func primaryKey() -> String?
return "id"
【讨论】:
感谢您添加此内容,看起来已接受的答案已更改以反映可选的返回类型。【参考方案3】:对于 Swift 5:
import RealmSwift
class Signature: Object
@objc dynamic var id = ""
override static func primaryKey() -> String?
return "id"
为避免:由于未捕获的异常“RLMException”而终止应用程序,原因:“对象上不存在主键属性“id”。
【讨论】:
这个答案拯救了我的一天!非常感谢!以上是关于如何在 Swift for Realm 模型中设置主键的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Realm 中设置 NSPredicate 以找到 totalPrice > X?
如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据