具有多个日期条目(每年大约 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 万个数据中执行时间过长

R:具有多个标题的列表-如何按标题拆分(每个标题的行数不等)

多个 pod/微服务更新/插入同一条记录

多个日期条目

需要将日期范围转换为 MySQL 中的多个日期条目