按插入顺序检索核心数据实体

Posted

技术标签:

【中文标题】按插入顺序检索核心数据实体【英文标题】:Retrieve Core Data Entities in Order of Insertion 【发布时间】:2011-02-12 01:38:43 【问题描述】:

我可以在 NSSortDescriptor 中使用内部 ID 变量或时间戳来吗?

如果有更简洁的方法,我宁愿不必创建此类属性,但如果没有其他选择,我显然会这样做。

【问题讨论】:

【参考方案1】:

不,如果您想要数据的排序顺序,您需要自己将其添加到您的实体中。但是,您可以轻松添加默认值为“NOW”的 NSDate 属性,以便自动填充。

【讨论】:

将默认值设置为 NOW 将不起作用,您需要将 self.date = [NSDate date];在您的 NSManagedObject 子类中的 -(void)awakeFromInsert 内。【参考方案2】:

您还可以为您的实体添加一个属性,将其命名为“sortNum”之类的名称,然后在获取实体时使用排序描述符获取它。

第 1 步

添加排序属性,在本例中我将其命名为“displayOrder”

第 2 步

将新项目追加或插入到您的列表中。

 let insertAt = 0
 managedContextVar.insert(mngdObjectVar, atIndex: insertAt )

第 3 步

对该实体中的所有内容进行排序并更新其排序值。

func updateDisplayOrder() 
    for i in 0..<taskList_Cntxt.count 
        let task = taskList_Cntxt[i]
        task.setValue( i, forKey: "displayOrder" )
    

然后保存!

第 4 步

现在,下次您执行 fetch 请求时,请确保添加排序。

   let sortDescriptor = NSSortDescriptor(key: "displayOrder", ascending: true )

就是这样!

这应该可以很好地处理您的排序。老实说,有时这段代码确实会从顶部而不是顶部插入我的新项目,但 95% 的时间这段代码运行良好。无论如何,你得到了这个想法,并且可以调整和改进它。

祝你好运。

【讨论】:

我知道这是旧的,但我正在考虑做一些非常相似的事情。这是否存在任何性能问题,每次移动某些东西时都必须重写潜在的数千条记录?

以上是关于按插入顺序检索核心数据实体的主要内容,如果未能解决你的问题,请参考以下文章

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

核心数据关系,如何从关系中插入和检索数据

是否可以针对特定字段在 mysql 或 mongodb 中按顺序保存数据?

如何存储位置数据以使用核心数据进行跟踪?

从 HashMap 中检索的值的顺序是插入顺序吗

插入..按[重复]顺序选择