[英]Storing an array of Realm objects inside another Realm object (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
保存對workoutID
的WorkoutSessionObject
的引用,這是到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.