2016-11-10 187 views
1

我曾尝试将领域对象保存到我的数据库,但它不起作用。如何保存领域关系(列表)

这里是我的模型:

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 

我在做什么错了?

回答

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) 
    } 
} 

信用卡对象已存在于领域,因此不要再添加它。

+0

谢谢。它解决了其中一个问题。现在,每次我下载信用卡清单并在领域进行更新时,都会失去采购。 不应该realm.add(newCreditCard,update:true)保持所有购买关系(如果信用卡已经存在于领域)? – hdoria