我想創建一個應用程序,該應用程序在我慢跑並使用Core Data存儲信息時進行記錄。我想存儲每次鍛鍊的日期,距離和跑步時間。我也希望能夠顯示一個摘要,其中包含我已經運行的總次數和總運行距離。如何使用KVO更新屬性
在我的設計中,我可以直接從鍛鍊對象顯示摘要。我已經跑了多少次,只是鍛鍊對象的數量,我可以總結每次鍛鍊的距離,以獲得總跑步距離。但是,我認爲第二個操作的成本太高,因爲每次我想要顯示該數據時都必須掃描整個數據庫(這與iTunes中的問題相同,因此您需要顯示音樂的總時數設備)。每次應用程序午餐時,我都可以將這些信息存儲在一個屬性中,但我想這會導致啓動緩慢。因此,我認爲我寧願有2個coredata對象總結和鍛鍊:
+---------------------+ +---------------------+
|Summary | |Workout |
+---------------------+ +---------------------+
|totalDistance | <--------------->> |date |
|totalAmountOfWorkouts| |distance |
+---------------------+ |time |
+---------------------+
現在,它來了這個問題。如何更新摘要?
我可以手動更新totalDistance和totalAmountOfWorkouts。我想象實現某種updateWorkout方法,每次創建一個新的鍛鍊時都會觸發它。但是,我知道Coredata已經具備觀察功能,並且可以告訴我什麼時候插入了一個新的Workout對象,並且我可以更新Summary:KVO。我從來沒有使用過KVO,我想知道這是否適合使用KVO?但是,你是怎麼做的?實際上,KVO是解決此問題的最佳方法,還是應該在鍛鍊中實施協議並將摘要指定爲委託?我非常記得聽說KVO模式很難調試。
彙總,我的問題是:
Q1:我應該得到totalDistance直接掃描數據庫?問題12:我應該使用KVO還是委託模式?
問題3:totalDistance如何更新?
你會以同樣的方式解決問題的iTunes(小時的音樂量)的例子嗎? – Alvaro 2012-01-10 14:44:05
如果我有CoreData中的所有跟蹤信息,我肯定會試試! – 2012-01-10 15:58:04
而不是執行@ sum.distance技巧。我遍歷每個Workout.distance值 – Alvaro 2012-01-10 21:01:01