核心数据模型设置
Posted
技术标签:
【中文标题】核心数据模型设置【英文标题】:Core Data Model set up 【发布时间】:2012-10-28 12:04:18 【问题描述】:我有一个使用核心数据模型跟踪费用的 ios 应用程序:
场景:
-> 一个名为“Money”的抽象父实体,具有“vendor”、“date”、“amount”等属性。 “费用”和“收入”这两个子实体继承自父实体“金钱”。然后还有其他实体,例如“Category”和“subCategory”及其属性。截至目前的总数:我的数据模型中有 5 个实体(Money、Expense、Income、Category 和 Subcategory)。
问题:我想要实现的是每天、每周、每两周、每月和每年跟踪费用。我正在考虑用 12 个属性(1 月 - 12 月 - > 月份名称)让实体说“月份”,但这不是太复杂吗?
想法?
我有一个表格视图,并使用 NSFetchedResultsController 来填充我的表格视图,其中包含各种费用和收入。
【问题讨论】:
您是在谈论过滤 tableView 还是要计算平均费用(每天、每周等) 我只想正确设置我的核心数据模型,它现在可以与我上面提到的所有内容一起工作。但我确实想每天、每周、每两周计算一次费用,然后使用 Core-Plot 显示它的图表。所以,我想知道如何按日期或月份对其进行排序? 为了确保我们在同一页面上:所以您已经收集了一些数据,现在想要处理这些数据以接收如下内容:每天的费用:43 美元;每周费用:$301; ...正确吗? 是的,你明白了。就像我将一些费用数据保存为 43 美元一样。我的“金钱”(父实体)中只有一个“日期”属性。我将如何管理一天、一周、两周的费用?我是否必须创建另一个实体,例如 Months 并在其中有 12 个月的名称属性?我在这里很困惑。 所以基本上你想总结给定时间段内的所有费用,然后除以该时间段内的天数、周数、月数等? 【参考方案1】:您必须创建一个带有NSPredicate
的NSFetchRequest
,该NSPredicate
在适当的时间段内进行过滤。假设您想列出两个日期之间的所有费用,您可以实现一个返回 NSFetchRequest
的方法来过滤此期间:
- (NSFetchRequest *)filteredFetchRequestForEntity:(NSString *)entityName startDate:(NSDate *)startDate endDate:(NSDate *)endDate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@", startDate, endDate];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
return fetchRequest;
然后您可以在 NSFetchedResultsController
中使用此 fetchRequest
类似于我在您的另一个问题中的回答:
CoreData and TableViews
那么你所要做的就是为你想要的时间段创建 start- 和 endDate 的 NSDate 对象,并将它们传递给这个方法。
【讨论】:
哦,好的!所以,我不必真的搞砸核心数据模型?使用适当的谓词获取请求会产生所需的结果吗? 没错,既然您已经知道了费用发生的日期,那么您需要做的就是适当地过滤它们。但是如果你想在表格视图的不同部分显示多个时间段,那就更复杂了。 听起来不错。你知道我应该如何为开始和结束日期创建 NSDate 对象吗?假设,我打算计算一周(开始日期 10 月 1 日)结束日期(10 月 7 日)的费用?实际上,我确实在我的应用程序中使用了一个自定义日历,它具有开始日期和结束日期属性,所以我可以使用它来创建对象,对吧? 正确。如果您的日历将选定的日期作为 NSDate 对象提供,那么您就可以开始了。如果它提供字符串,您必须将它们转换为 NSDate 对象。请查看NSDateFormatter Class Reference 了解更多信息。 非常感谢。感谢您抽出宝贵的时间帮助我。你能告诉我在不久的将来我该如何联系你,因为我知道我会在这个应用程序的某个地方或其他地方卡住。以上是关于核心数据模型设置的主要内容,如果未能解决你的问题,请参考以下文章