2016-11-10 188 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