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

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

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

这里只有我面临一些澄清

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

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

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

解决方案:2 基于增量数

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

【问题讨论】:

    标签: ios core-data nsdate auto-increment nsmanagedobject


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2017-05-16
      • 2010-10-21
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      相关资源
      最近更新 更多