Ich habe CatalogItem
Objekte mit Primärschlüssel in meinem Code. Realm wirft einen Fehler beim Schreiben in den folgenden Code:Bestehendes Objekt an Realm List anhängen
class CartItem: Object {
dynamic var id: Int = 0
dynamic var item: CatalogItem!
dynamic var amount: Int = 0
convenience required init(id: Int, item: CatalogItem, amount: Int) {
self.init()
self.id = id
self.item = item
self.amount = amount
}
}
class Cart: Object {
var items = List<CartItem>()
func addItem(item: CatalogItem) {
let realm = try! Realm()
let newItem = CartItem(id: item.id, item: item, amount: 1)
do {
try realm.write {
items.append(newItem)
}
} catch let e {
handleError(e)
}
}
}
Fehler:
'RLMException', reason: 'Can't set primary key property 'id' to existing value '352'.'
I Realm erwarten CatalogItem
zu verweisen bestehende, aber es sieht aus wie ein weiteres hinzuzufügen versucht. Gibt es eine Möglichkeit, diese Art von Beziehung zu implementieren? Hinweis: Alle Objekte werden in einem Bereich gespeichert.
Nun, ich erstelle kein anderes Objekt, ich referenziere existierende. Ich meine, 'CartItem' hat keinen Primärschlüssel. Nur das Element, auf das es verweist - 'CatalogItem' hat eins. Aber ich rufe 'CatalogItem.init()' nirgendwo auf, warum wird es also neu erstellt? – charlag
Ja, Sie haben recht, es ist kein Dupon, aber die Antwort ist fast die gleiche, Sie können nicht zwei Objekte mit dem gleichen Primärschlüssel haben – Idan
Lassen Sie mich die Frage stellen: wenn ich 'CartItem' und pass' erstelle CatalogItem' wird Realm versuchen, ein anderes 'CatalogItem' zu erstellen? – charlag