Подтвердить что ты не робот

Как установить первичный ключ в модели Swift для Realm

Я использую Realm в новом проекте iOS Swift. Я использую 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

4b9b3361

Ответ 1

primaryKey должна быть функция класса, которая возвращает имя свойства, которое является первичным ключом, а не метод экземпляра, который возвращает значение первичного ключа.

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

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

Ответ 2

Возвращаемый тип primaryKey() не является обязательным:

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

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