【发布时间】:2013-10-05 06:39:40
【问题描述】:
我想创建一个应用程序,在我慢跑时记录并使用 Core Data 来存储信息。我想存储每次锻炼的日期、距离和时间。我还希望能够显示一个摘要,其中包含我跑步的总次数和总跑步距离。
在我的设计中,我可以直接从 Workout 对象中显示摘要。我跑了多少次只是锻炼对象的数量,我可以总结每个锻炼中的距离以获得总距离。但是,我认为第二次操作成本太高,因为每次我想显示该数据时都必须扫描整个数据库(这与在 iTunes 中要显示的音乐总小时数相同的问题设备)。每次应用程序午餐时,我都可以将此信息存储在一个属性中,但我想这会导致启动缓慢。因此,我认为我宁愿拥有 2 个 coredata 对象 Summary 和 Workout:
+---------------------+ +---------------------+
|Summary | |Workout |
+---------------------+ +---------------------+
|totalDistance | <--------------->> |date |
|totalAmountOfWorkouts| |distance |
+---------------------+ |time |
+---------------------+
现在问题来了。 Summary应该如何更新?
我可以手动更新 totalDistance 和 totalAmountOfWorkouts。我想象实现某种 updateWorkout 方法,每次创建新的 Workout 时都会触发该方法。但是,我知道 Coredata 已经具有观察功能,并且可以告诉我何时插入了新的 Workout 对象,并且我可以更新 Summary: KVO。我从未使用过 KVO,我想知道这是否是使用 KVO 的正确案例?但是,你是怎么做的?实际上,KVO 是解决这个问题的最佳方法,还是我应该在 Workout 中实现一个协议并将 Summary 作为委托?我模糊地记得听说过 KVO 模式很难调试。
总结一下,我的问题是:
Q1:我应该让 totalDistance 直接扫描数据库吗?
Q2:我应该使用 KVO 还是委托模式?
Q3:totalDistance 是如何更新的?
【问题讨论】:
标签: objective-c ios core-data delegates key-value-observing