gpt4 book ai didi

ios - Realm Swift - 保存对另一个对象的引用

转载 作者:行者123 更新时间:2023-11-28 10:40:12 25 4
gpt4 key购买 nike

在阅读 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', reason: 'The FavouriteObject.workoutReference property must be marked as being optional.

但是,当我尝试使其成为可选的(通过添加?)时,它说

"Cannot use optional chaining on non-optional value of type 'WorkoutSessionObject"!

总结

我想在我的 FavouriteObject 中保存对 WorkoutSessionObjectworkoutID 的引用,这是到 WorkoutSessionObject 的实际链接(因此可以从收藏夹访问属性)

更新

使用下面的答案,我现在已经解决了锻炼引用的问题。这现在在 Realm 中显示为“workoutReference”下的正确格式 ()。但是,我现在在尝试保存时在“workoutReference”中得到“nil”。我知道 workoutID 正确通过,因为我正在控制台中打印它。

最佳答案

您需要更改workoutReference 的声明。首先,您需要通过在 type 之后编写 ? 使其成为 Optional。其次,你不应该给它分配一个默认值,它需要是 Optional 是有原因的。 linked docs明确指出

to-one relationships must be optional

workoutReference 显然是一对一的关系。

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

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

关于ios - Realm Swift - 保存对另一个对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50874280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com