Ich habe eine Funktion, wo ich ein payment
und ein debt
Objekt übergeben (beide sind Strukturen, die die Daten in meiner Realm-Datenbank). Ich möchte dann die payment
an die paymentHistory
der debt
anhängen. Hier ist der Code, den ich für diesen Einsatz:Realm nicht persistent Änderungen im Schreiben
static func savePayment(payment: Payment, forDebt debt: Debt) throws {
let realm = try Realm()
let predicate = NSPredicate(format: "created = %@", debt.created)
guard let dbDebt = realm.objects(DBDebt.self).filter(predicate).first else { fatalError("no debt found in DB for payment") }
let dbPayment = DBPayment(payment: payment)
try realm.write {
// first try
// dbDebt.paymentHistory.append(dbPayment)
// second try
let newPaymentHistory = dbDebt.paymentHistory
newPaymentHistory?.append(dbPayment)
dbDebt.paymentHistory = newPaymentHistory
}
}
Bitte beachte, dass ich darunter bin den Code für die beiden Versuche, die ich gemacht habe, von denen keiner die Daten tatsächlich anhielt (Ich habe dies den Realm-Browser).
Beachten Sie auch, dass beim Debuggen kann ich sehen, dass die DBPayment
erstellt wurde und ordnungsgemäß an die dbDebt
Liste angehängt wurde. Vielleicht bin ich etwas fehlt offensichtlich, aber ich erwarte, dass dies im Reich, weil die Arbeit documentation, sie Folgendes angeben:
Für Referenz, hier sind die Definitionen meine structs und DB-Objekte:
class DBDebt: Object {
dynamic var amount: Double = 0.0
dynamic var owner: DBPerson? = DBPerson()
var paymentHistory: List<DBPayment>? = List<DBPayment>()
dynamic var currency: String = Currency.Dollar.rawValue
dynamic var created: NSDate = NSDate()
dynamic var deadline: NSDate? = nil
init(debt: Debt) {
self.amount = debt.amount
self.owner = DBPerson(person: debt.owner)
self.paymentHistory = debt.paymentHistory.reduce(List<DBPayment>()) { (list: List<DBPayment>, payment: Payment) in
list.append(DBPayment(payment: payment))
return list
}
self.currency = debt.currency.rawValue
self.created = debt.created
self.deadline = debt.deadline
super.init()
}
required init(value: AnyObject, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init() {
super.init()
}
}
class DBDebt: Object {
dynamic var amount: Double = 0.0
dynamic var owner: DBPerson? = DBPerson()
var paymentHistory: List<DBPayment>? = List<DBPayment>()
dynamic var currency: String = Currency.Dollar.rawValue
dynamic var created: NSDate = NSDate()
dynamic var deadline: NSDate? = nil
init(debt: Debt) {
self.amount = debt.amount
self.owner = DBPerson(person: debt.owner)
self.paymentHistory = debt.paymentHistory.reduce(List<DBPayment>()) { (list: List<DBPayment>, payment: Payment) in
list.append(DBPayment(payment: payment))
return list
}
self.currency = debt.currency.rawValue
self.created = debt.created
self.deadline = debt.deadline
super.init()
}
required init(value: AnyObject, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init() {
super.init()
}
}
struct Payment {
init(amount: Double, paymentDate: NSDate = NSDate()) {
self.amount = amount
self.paymentDate = paymentDate
}
let amount: Double
let paymentDate: NSDate
}
class DBPayment: Object {
dynamic var amount: Double = 0.0
dynamic var paymentDate: NSDate = NSDate()
init(payment: Payment) {
self.amount = payment.amount
self.paymentDate = payment.paymentDate
super.init()
}
required init(value: AnyObject, schema: RLMSchema) {
super.init(value: value, schema: schema)
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init() {
super.init()
}
}