如何按插入的顺序获取 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?的主要内容,如果未能解决你的问题,请参考以下文章