如何按插入的顺序获取 NSManagedObjects?

Posted

技术标签:

【中文标题】如何按插入的顺序获取 NSManagedObjects?【英文标题】:How to fetch NSManagedObjects in the inserted order? 【发布时间】:2015-08-18 13:39:03 【问题描述】:

我有一个要求,本地创建的事件必须与服务器同步。为了简要解释这一点,让我们考虑一下这种情况,在 A > B 的离线应用程序 A 和 B 中发生了两个事件。在这种情况下,B 应该仅在 A 完成同步时进行同步。

要解决这个问题,我的实体中必须有一个额外的属性来识别哪个是之前创建的。此属性可以维护创建时间或任何增量数字。

这里只有我面临一些澄清

解决方案:1 基于创建时间

如果我在该属性中保持创建时间,是否适用于以下场景

假设我今天在事件“A”上创建,然后我将设备的日期更改为前一天的日期,然后我回到我的应用程序并创建另一个事件“B”。这里哪一个会更早?如果应用程序说“B”是最近插入的对象,那么我可以坚持使用此解决方案本身没有问题,否则我需要转向其他解决方案。有没有优化的方案通过维护创建时间来查找插入的订单?

解决方案:2 基于增量数

我认为核心数据不提供任何自动增量 ID,因此我们需要手动维护它。如果是这样,保持最大分配值的更好方法是什么?如果我将最大分配值存储在 NSUserDefaults 中会很好吗?每当应用程序创建事件时,将从 NSUserDefaults 获取值并添加 +1,然后我将为事件分配最终值。这种方法合适吗?否则,如果您知道任何更好的解决方案,请指导我

【问题讨论】:

【参考方案1】:

Core Data 中没有内置自动递增的数字,因为它更像是一个特定于业务逻辑的项目。不过实现起来并不难。

您可以存储在持久存储的元数据中使用的最后一个数字。在插入过程中,只需增加该数字,然后将其添加到每个实体中。插入完成后,更新元数据中的数字。

这就是 Core Data 为 objectID 更新自己的插入编号的方式。

【讨论】:

以上是关于如何按插入的顺序获取 NSManagedObjects?的主要内容,如果未能解决你的问题,请参考以下文章

如何按顺序将项目插入列表?

如何确定实际的数据库行插入顺序?

Java二叉树按顺序插入

如何确保 BULK INSERT 将按顺序插入我的平面文件行?

按字母顺序插入列表 C#

如何获取指定的 CoreData 值? [关闭]