如何按插入顺序获取 NSManagedObjects?

How to fetch NSManagedObjects in the inserted order?

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

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

这里只有我面临一些澄清

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

如果我在该属性中保留创建时间,是否适合以下情况

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

解决方法:2 基于增量数

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

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

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

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