我有一個包含零個或多個「鍛鍊」的實體「日」的核心數據模型。當天實體擁有大量的財產,這些財產是通過總結所有的鍛鍊來計算的。例如,totalKM將所有鍛鍊的km屬性值相加。基於核心數據中基礎實體屬性的計算屬性
我只是不能得到這個工作。
我可以得到總計通過重寫值出現(forKey)方法:
public override func value(forKey key: String) -> Any? {
if(key == "swimSeconds"){
var swimSeconds: Int64 = 0
if let array = workouts?.allObjects{
for w in array{
let workout: Workout = w as! Workout
if (workout.sport == Workout.SPORT.Swim.rawValue){
swimSeconds += workout.seconds
}
}
}
return swimSeconds
}else{
return super.value(forKey: key)
}
}
然而,這意味着如果底層鍛鍊被改變,這是不反映在在日總所示的值實體。此外,它只是覺得這不是正確的做法 - 我不應該重寫此方法。
我已經嘗試使用Xcode創建NSManagedObject子類,但創建了所有@NSManaged變量的擴展,但這只是給出了大量的錯誤「擴展可能不包含存儲的屬性」,它只能通過刪除@NSManaged進行修復。
我試圖創造我自己擴展到日,並有一個屬性只有一個getter:
var totalSwimSeconds: Int64{
get{
var swimSeconds: Int64 = 0
if let array = workouts?.allObjects{
for w in array{
let workout: Workout = w as! Workout
if (workout.sport == Workout.SPORT.Swim.rawValue){
swimSeconds += workout.seconds
}
}
}
return swimSeconds
}
}
這種方法產生的運行時錯誤: 實體的日子並不鍵值爲重點順應編碼,「 totalSwimSeconds「
我在網上搜索瞭解我是否可以找到這個例子,但所有的例子都是在給定實體內組合屬性的簡單情況(例如,來自DOB的年齡,姓和名的全名)一個更復雜的計算來看待其他實體中包含的屬性。
如何在覈心數據中創建計算屬性,這些屬性將從基礎實體計算並在更新時進行更新?
[我使用的Xcode 9夫特4]
「兼容的編碼不鍵值」 什麼行代碼給你? –
我有一個文本字段綁定到Day實體數組控制器選擇與模型關鍵路徑totalSwimSeconds - 我相信這是導致運行時異常。對於SWIFT和xCode來說,這是非常新的,所以我可能會錯過如何深入研究這個錯誤。 –