具有多个日期条目(每年大约 800 多个)的核心数据或 NSDictionary?啥是最容易实现的?
Posted
技术标签:
【中文标题】具有多个日期条目(每年大约 800 多个)的核心数据或 NSDictionary?啥是最容易实现的?【英文标题】:Core Data or NSDictionary with multiple date entries (about 800+ each year)? What would be the most easy to implement?具有多个日期条目(每年大约 800 多个)的核心数据或 NSDictionary?什么是最容易实现的? 【发布时间】:2012-08-11 22:01:33 【问题描述】:我正在尝试找出解决此问题的最佳方法。
--
我有一个“历史”表, 列出有数据的所有年份。
如果用户单击给定的年份,它会转到一个新表,并且, 列出有数据的所有月份。
点击一个给定的月份,会显示一个新的表格, 列出有数据的所有天。
单击特定日期,显示一个或多个时间戳的列表。
--
解决这个问题的最佳方法是什么?
如果用户创建时间戳。我需要用今天的日期插入它。
我还需要有能力,如果一个用户, 删除给定的年份。那一年的一切都被删除了。
同样的方式, 删除一个月,即删除该月的所有内容,因为它是特定的年份。
等等,直到用户应该能够删除单个时间戳。
--
我想我会使用带有“年份”键的字典。 2012, 2013, ...
每个人都检索另一个带有“月份”键的字典,1,2,3,4,...
等等……等等……
我还认为我可以使用 Core Data 制作模型。
代表“年”实体的班级年,与许多可能的月有关,每个月与许多可能的日,以及 时间 *邮票*.
最后,
我想创建一个只有两个实体的模型。
Entries,只有一个属性“Date”,与“Time Stamps具有对多关系 strong>",接收当天所有可能的时间戳。
我是 ios 编程新手。所以这对我来说都是理论。但我确实遵循了一些 Core Data 教程和其他使用 NSDictionaries、协议委托等的教程。
我所采用的“挖掘”方法似乎更优雅。特别是因为我认为我可以以级联方式删除特定的给定对象?
这些有意义吗?还是有更明显的简单方法来解决它?另外,请在回答中考虑如果用户选择删除“树”中的给定条目
,什么会更容易实现非常感谢任何帮助。
提前谢谢!
努诺
【问题讨论】:
读和写整本字典更容易。但是当它在内存中时,它会变得越来越大。因此,请使用 Core Data、SQLite,然后加载您需要的内容。 使用核心数据。谢谢! 【参考方案1】:如果您要依赖 Core Data 或任何数据库引擎,解决此问题的最佳方法是使用数据库本身。
我看到了两种可能的解决方案(当然还有更多)。第一个,最简单的:
Entity
- timestamp
- year
- month
- day
- all_the_stuff_you_need
将年、月和日设为只读,随时间戳更新。索引:年、年+月、年+月+日。轻松通话。
这样,您可以非常简单地查询数据库,要求它返回您需要的实体,并且只返回您需要的实体。
更复杂的设置是:
Entity
- timestamp
- all_the_stuff_you_need
- year -> Year
- month -> Month
- day -> Day
Year
- year
- entities ->> Entity
Month
- month
- entities ->> Entity
Day
- day
- entities ->> Entity
所以基本上,年、月、日、月和日的 3 个数据域是不可变的。
这种结构更复杂,但可以更好地查看您的数据。由于数据域明确且定义明确,因此您可以直接访问有关数据的更多信息。
第三种解决方案是创建一个包含年、月和日的日期实体,每天输入一个条目。上述两种解决方案之间的中间地带。我觉得没那么有趣,但是,嘿,无论如何它可能会满足你的需求。
【讨论】:
我从最简单的只有一个实体开始。但我可能只是更改为 3 个数据域,因为现在我正在执行获取请求。它检索一切!我好像不太对?我想我可以只检索一次所有内容,然后在我经过时为每个控制器传递一个带有 Month 的对象,然后是一个带有 Day 的对象。你有什么建议吗?非常感谢你的帮助!赞赏! 您应该能够使用[NSPredicate predicateWithFormat: @"year = %x AND month = %x", year, month]
之类的简单谓词仅获取您感兴趣的实体。没有?
大声笑,好的。所以试试这个:NSFetchRequest* fetchRequest = [NSFetchRequest new]; fetchRequest.entity = [NSEntityDescription entityForName: @"Entity" inManagedObjectContext: … ]; fetchRequest.predicate = [NSPredicate predicateWithFormat: @"year = %x", year];
并继续前进。以上是关于具有多个日期条目(每年大约 800 多个)的核心数据或 NSDictionary?啥是最容易实现的?的主要内容,如果未能解决你的问题,请参考以下文章
AWS RDS MySql 具有复合索引和日期范围的简单查询在大约 800 万个数据中执行时间过长