新しいiOS SwiftプロジェクトでRealmを使用しています。iOSSDK 8.0およびRealm 0.85.0でXcode 6.0.1を使用しています
addOrUpdateObject
を実行できるように、新しいRealm主キー機能を使用しようとしています。
サンプルモデルを次に示します。
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
primaryKey
は、主キーの値を返すインスタンスメソッドではなく、主キーであるプロパティの名前を返すクラス関数である必要があります。
class Foo: RLMObject {
dynamic var id = 0
dynamic var title = ""
override class func primaryKey() -> String? {
return "id"
}
}
primaryKey()
の戻り型はオプションです。
class Foo: RLMObject {
dynamic var id = 0
dynamic var title = ""
override class func primaryKey() -> String? {
return "id"
}
}
Swift 5:の場合
import RealmSwift
class Signature: Object {
@objc dynamic var id = ""
override static func primaryKey() -> String? {
return "id"
}
}
回避方法:キャッチされない例外 'RLMException'によるアプリの終了、理由: 'プライマリキープロパティ' id 'がオブジェクトに存在しません。