我想创建一个应用程序,该应用程序在我慢跑并使用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