簡體   English   中英

Realm Swift-保存對另一個對象的引用

[英]Realm Swift - save a reference to another object

我認為在這里這里閱讀后,這將非常簡單,但是我有點卡住了。

我有一個看起來像這樣的'favouriteWorkout'對象:

class FavouriteObject: Object {
    @objc dynamic var favouriteWorkoutName = ""
    @objc dynamic var workoutReference = WorkoutSessionObject()

    override class func primaryKey() -> String? {
        return "favouriteWorkoutName"
    }
}

我在這里想要做的是在Realm中引用一個WorkoutSessionObject ,當將鍛煉另存為收藏夾時,該鏈接會從WorkoutName鏈接。

我WorkoutSessionObject有一個主鍵workoutID這是一個UUID字符串。 看起來像這樣:

class WorkoutSessionObject: Object {
    @objc dynamic var workoutID = UUID().uuidString
    @objc dynamic var workoutType = ""
    let exercises = List<WorkoutExercise>()
    @objc dynamic var totalExerciseCount = 0
    @objc dynamic var rounds = 0
    @objc dynamic var favourite : Bool = false

    override class func primaryKey() -> String? {
        return "workoutID"
    }
}

然后,我嘗試使用以下方法進行保存:

let favouriteWorkout = FavouriteObject()
favouriteWorkout.favouriteWorkoutName = favouriteName
favouriteWorkout.workoutReference = (realm.object(ofType: WorkoutSessionObject.self, forPrimaryKey: self.workoutID))!

do {
    try realm.write {
        realm.add(favouriteWorkout)
    }
} catch {
    print ("Error adding favourite")
}

但是當我運行時,我崩潰了:

'RLMException',原因:' FavouriteObject.workoutReference屬性必須標記為可選。

但是,當我嘗試將其設為可選時(通過添加?),它說

“無法對'WorkoutSessionObject類型的非可選值使用可選鏈接”!

摘要

我想在我的FavouriteObject保存對workoutIDWorkoutSessionObject的引用,這是到WorkoutSessionObject的實際鏈接(因此可以從收藏夾訪問屬性)

更新

使用下面的答案,我現在對鍛煉參考的問題進行了排序。 現在,這在Realm中以正確的格式()顯示在“ workoutReference”下。 但是,現在嘗試保存時,“ workoutReference”中顯示“ nil”。 我知道在控制台中打印出trainingID時,它正確通過了。

property-cheatsheet中,您可以看到不允許使用非可選的Object -property,因此您必須按如下所示進行更改:

class FavouriteObject: Object {
    @objc dynamic var favouriteWorkoutName = ""
    // here you have to make the property optional
    @objc dynamic var workoutReference: WorkoutSessionObject?

    override class func primaryKey() -> String? {
        return "favouriteWorkoutName"
    }
}

您需要更改workoutReference的聲明。 首先,您需要通過編寫使其成為Optional ? 鍵入后 其次,您不應為其分配默認值,出於某種原因,它必須是Optional的。 鏈接的文檔明確指出

一對一關系必須是可選的

,和workoutReference顯然是一對一的關系。

class FavouriteObject: Object {
    @objc dynamic var favouriteWorkoutName = ""
    @objc dynamic var workoutReference:WorkoutSessionObject?

    override class func primaryKey() -> String? {
        return "favouriteWorkoutName"
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM