【发布时间】:2018-11-25 05:20:36
【问题描述】:
在阅读 here 和 here 后,我认为这会很简单,但我有点卡住了。
我有一个看起来像这样的“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 中保存对WorkoutSessionObject 的workoutID 的引用,这是到WorkoutSessionObject 的实际链接(因此可以从收藏夹中访问属性)
更新
使用下面的答案,我现在已经对锻炼参考的问题进行了分类。这现在在 Realm 中显示为“workoutReference”下的正确格式 ()。但是,我现在在尝试保存时在“workoutReference”中得到“nil”。当我在控制台中打印它时,我知道锻炼 ID 正确通过。
【问题讨论】: