我有一个“favouriteWorkout”对象,如下所示:
class FavouriteObject: Object {
@objc dynamic var favouriteWorkoutName = ""
@objc dynamic var workoutReference = WorkoutSessionObject()
override class func primaryKey() -> String? {
return "favouriteWorkoutName"
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里尝试做的是WorkoutSessionObject在将锻炼保存为收藏夹时引用 Realm 中的 a,该链接来自 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"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用以下方法保存:
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")
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行时我会崩溃:
'RLMException',原因:'该
FavouriteObject.workoutReference属性必须标记为可选。
但是,当我尝试将其设为可选(通过添加?)时,它说
“不能对‘WorkoutSessionObject’类型的非可选值使用可选链!
概括
我想在 my 中保存workoutIDa的引用,这是指向 the 的实际链接(因此可以从收藏夹访问属性)WorkoutSessionObjectFavouriteObjectWorkoutSessionObject
更新
使用下面的答案,我现在已经解决了锻炼参考的问题。现在,这在 Realm 中显示为“workoutReference”下的正确格式 ()。但是,当我尝试保存时,我现在在“workoutReference”中得到“nil”。当我在控制台中打印锻炼 ID 时,我知道它是正确的。
您需要更改 的声明workoutReference。首先,你需要在type后面Optional写上它。其次,您不应该为其分配默认值,它需要有一个原因。链接的文档明确指出?Optional
一对一关系必须是可选的
,并且workoutReference显然是一对一的关系。
class FavouriteObject: Object {
@objc dynamic var favouriteWorkoutName = ""
@objc dynamic var workoutReference:WorkoutSessionObject?
override class func primaryKey() -> String? {
return "favouriteWorkoutName"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3034 次 |
| 最近记录: |