如何保存领域关系(列表)

时间:2016-11-10 17:50:28

标签: swift model realm

我曾尝试将领域对象保存到我的数据库中,但它无法正常工作。

这是我的模特:

class CreditCard: Object {
    dynamic var owner: String?
    var purchases: List<Purchase>()
}

第二类看起来像那样:

class Purchase: Object {
    dynamic var id: Int = 0
    dynamic var name: String?
    dynamic var data: String?
    let creditCard = LinkingObjects(fromType: CreditCard.self, property: "purchases")
}

我可以保存所有的CreditCard对象。

在第二个视图控制器上,我还有另一个请求,要下载信用卡购买的所有商品。在请求之后,这是我尝试写入领域的方式:

let creditCard = realm.objects(CreditCard.self).first // there's some code to get this. 
try! realm.write {
    for purchase in purchases { // purchases = objects from a son
        let newPurchase = Purchase()
        newPurchase.id = purchase["Id"].intValue
        newPurchase.name = purchase["name"].stringValue
        newPurchase.date = purchase["date"].dateValue

        creditCard.purchases.append(newPurchase)
        realm.add(creditCard, update: true)
    }
 }

由于某些原因,当应用关闭时,所有购买对象都会丢失。购买将保存在我的领域对象上,但CreditCard和Purchase之间的关系将丢失。因此,当我重新打开应用程序时,以下代码的返回始终为空:

let purchases = creditCard.purchases

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您还需要保存购买,而不仅仅是在父信用卡对象中。

let creditCard = realm.objects(CreditCard.self).first // there's some code to get this. 
try! realm.write {
    for purchase in purchases { // purchases = objects from a son
        let newPurchase = Purchase()
        newPurchase.id = purchase["Id"].intValue
        newPurchase.name = purchase["name"].stringValue
        newPurchase.date = purchase["date"].dateValue
        realm.add(newPurchase) // <-- save the purchase object to realm

        creditCard.purchases.append(newPurchase)
    }
 }

信用卡对象已存在于领域中,因此请勿再次添加。