如何在Swift for Realm模型中设置主键

时间:2014-10-01 23:25:43

标签: ios swift realm

我在一个新的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

3 个答案:

答案 0 :(得分:78)

primaryKey需要是一个类函数,它返回作为主键的属性的名称,而不是返回主键值的实例方法。

class Foo: RLMObject {
    dynamic var id = 0
    dynamic var title = ""

    override class func primaryKey() -> String? {
        return "id"
    }
}

答案 1 :(得分:8)

primaryKey()的返回类型是可选的:

class Foo: RLMObject {
    dynamic var id = 0
    dynamic var title = ""

    override class func primaryKey() -> String? {
        return "id"
    }
}

答案 2 :(得分:0)

对于Swift 5:

import RealmSwift

     class Signature: Object {

           @objc dynamic var id = ""

            override static func primaryKey() -> String? {
                return "id"
            }
      }

要避免:由于未捕获的异常“ RLMException”而终止应用程序,原因:对象上不存在“主键属性” id”。