2016-02-11 126 views
1

Question:
什麼是在領域中使用嵌套對象的正確方法?Realm中的嵌套對象

任務:
我有一個叫做目標的模型,例如, 「減肥」和稱爲「條紋」的模型,例如本週你多久檢查一次。

這個想法是一個用戶專注於1x'Streak'的目標,最終他們可以開始新的連勝。因此,我想要有多個涉及一個目標的條紋。

這裏是模型我到目前爲止:

條紋模式

import Foundation 
import RealmSwift 

class Streak: Object { 

    dynamic var owner: Goal! 
    dynamic var StartDate = NSDate() 
    dynamic var Day1 = "" 
    dynamic var Day2 = "" 
    dynamic var Day3 = "" 
    dynamic var Day4 = "" 
    dynamic var Day5 = "" 
    dynamic var Day6 = "" 
    dynamic var Day7 = "" 
    dynamic var Completed = "" 
    dynamic var Active = "" 

// Specify properties to ignore (Realm won't persist these) 

// override static func ignoredProperties() -> [String] { 
// return [] 
// } 
} 

目標模式

class Goal: Object { 

    dynamic var id = 0 
    dynamic var Title = "" 
    dynamic var Aim = "" 
    dynamic var Action = "" 
    dynamic var Active = 0 
    let streaks = List<Streak>() 

    override class func primaryKey() -> String! { 
     return "id" 
    } 

// Specify properties to ignore (Realm won't persist these) 

// override static func ignoredProperties() -> [String] { 
// return [] 
// } 
} 

正如你所看到的,我給自己定了streak的「所有者」爲Goal!。我還在目標中創建了id的主鍵,並在目標模型中創建了一個streaks的列表。

我不明白的是如何在區域中正確存儲streak

要存儲一個目標,我有這樣的:

let goalObj = Goal() 
     goalObj.id = newID 
     goalObj.Title = setGoal.text! 
     goalObj.Aim = "" 
     goalObj.Action = setHabit.text! 
     goalObj.Active = 1 
//  goalObj.streaks = [NSDate(),"1","1","1","1","1","1","1","1","1"] 

     let realm = try! Realm() 

      try! realm.write { 
       realm.add(goalObj) 

我評論的goalObj.streaks線,因爲它是不正確的,給出了一個錯誤(值都是假的)。

我的具體問題是:
1.如何將存儲連勝對象,它引用了一個目標 - 我在哪裏把ID,如果在所有。
2.如何更新連勝。我應該創建一個streakID字段作爲主鍵嗎?我沒有看到像使用MySql一樣使用外鍵的方法。 3.是這個任務需要的列表嗎?

對於初學者問題的道歉。讚賞,馬特。需要

回答

2

goal參考您Streak類被定義爲:

動態無功目標:目標是什麼? //一對一的關係必須是可選的

然後你可以添加一個streak實例給Realm,它會自動將它鏈接到正確的目標。

此外,他們不建議將這兩個引用保持在一對多的關係中(即,父母對孩子和孩子對父母),因爲Realm不會爲你管理它。因此,我只是存儲子對父引用,並使用linkingObjects(_:forProperty:)動態檢索父對子鏈接。但是,這具有不能在謂詞中使用鏈接的缺點。

您並不需要主鍵才能正常工作。所以,如果你有條紋的數組,你可以使用:

​​

注意,你有孩子(連勝)之前到父(目標)添加到域。