J'utilise Realm dans un nouveau projet iOS Swift. J'utilise Xcode 6.0.1 avec iOS SDK 8.0 et Realm 0.85.0
J'essaie d'utiliser la nouvelle fonctionnalité de clé primaire de Realm pour pouvoir faire un addOrUpdateObject
.
Voici un exemple de modèle:
import Foundation
import Realm
class Foo: RLMObject {
dynamic var id = 0
dynamic var title = ""
func primaryKey() -> Int {
return id
}
}
Et comment j'essaye d'ajouter/mettre à jour un nouvel objet:
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()
Je reçois cette erreur:
RLMExecption ', raison:' 'Foo' n'a pas de clé primaire et ne peut pas être mis à jour
Voici les documents sur la clé primaire. Je ne le configure probablement pas correctement: http://realm.io/docs/cocoa/0.85.0/api/Classes/RLMObject.html#//api/name/primaryKey
Les derniers documents sont ici maintenant: https://realm.io/docs/objc/latest/api/Classes/RLMObject.html#//api/name/primaryKey
primaryKey
doit être une fonction de classe qui retourne le nom de la propriété qui est la clé primaire, pas une méthode d'instance qui retourne la valeur de la clé primaire.
class Foo: RLMObject {
dynamic var id = 0
dynamic var title = ""
override class func primaryKey() -> String? {
return "id"
}
}
Le type de retour de primaryKey()
est facultatif:
class Foo: RLMObject {
dynamic var id = 0
dynamic var title = ""
override class func primaryKey() -> String? {
return "id"
}
}
Pour Swift 5:
import RealmSwift
class Signature: Object {
@objc dynamic var id = ""
override static func primaryKey() -> String? {
return "id"
}
}
Pour éviter: Mettre fin à l'application en raison d'une exception non interceptée 'RLMException', raison: 'Propriété de clé primaire' id 'n'existe pas sur l'objet.