Ios 如何使NSSortDescriptor不按字母顺序排列?

Ios 如何使NSSortDescriptor不按字母顺序排列?,ios,swift,core-data,Ios,Swift,Core Data,所以我有一个简单的购物清单。到目前为止,名单是按字母顺序添加的。当我升错时,它从Z-A开始,升真是从A-Z开始 我只想根据添加项目的时间添加项目。没有命令,什么都没有。它只是添加到列表的后面 以下是我到目前为止的情况: func taskFetchRequest() -> NSFetchRequest<NSFetchRequestResult> { let fetchRequest = NSFetchRequest<NSFetchRequestResult>

所以我有一个简单的购物清单。到目前为止,名单是按字母顺序添加的。当我升错时,它从Z-A开始,升真是从A-Z开始

我只想根据添加项目的时间添加项目。没有命令,什么都没有。它只是添加到列表的后面

以下是我到目前为止的情况:

func taskFetchRequest() -> NSFetchRequest<NSFetchRequestResult> {
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Shopping")
    let sortDescriptor = NSSortDescriptor(key: "item", ascending: false)
    fetchRequest.sortDescriptors = [sortDescriptor]
    return fetchRequest
}
func taskFetchRequest()->NSFetchRequest{
let fetchRequest=NSFetchRequest(entityName:“购物”)
让sortDescriptor=NSSortDescriptor(键:“项”,升序:false)
fetchRequest.sortDescriptors=[sortDescriptor]
返回请求
}

要做到这一点,您必须在
购物对象中添加日期添加字段之类的内容。然后在那个日期进行排序,增加值


这只是因为数据库(包括CoreData)表没有内在的顺序。(通常,基础数据库引擎确实会生成看似递增的id。但您永远不应该依赖这些内部值。)

要做到这一点,您必须在
购物对象中添加日期添加字段之类的内容。然后在那个日期进行排序,增加值


这只是因为数据库(包括CoreData)表没有内在的顺序。(通常,基础数据库引擎确实会生成看似递增的id。但您永远不应该依赖这些内部值。)

您是根据名称排序的,我假设这是这行代码中的

let sortDescriptor = NSSortDescriptor(key: "item", ascending: false)
如果要按其他方式排序,请添加一个名为
createdDate
(或其他)的属性,您可以在ManagedObject的
awakeFromInsert
方法中初始化该属性,然后将其用作排序键:

let sortDescriptor = NSSortDescriptor(key: "createDate", ascending: false)

您是根据名称进行排序的,我假设这就是这一行代码中的

let sortDescriptor = NSSortDescriptor(key: "item", ascending: false)
如果要按其他方式排序,请添加一个名为
createdDate
(或其他)的属性,您可以在ManagedObject的
awakeFromInsert
方法中初始化该属性,然后将其用作排序键:

let sortDescriptor = NSSortDescriptor(key: "createDate", ascending: false)


删除此行
fetchRequest.sortDescriptors=[sortDescriptor]
或传递空数组,如
this fetchRequest.sortDescriptors=[]
,这可能实际上不起作用。如果这些对象是通过关系获取的,它们将是一个集合而不是有序的。@ReinierMelian这样做之后,列表不是按字母顺序排列的,这很好,但顺序很奇怪,项目不是添加在后面,而是随机添加在中间和其他位置places@user3449976我不明白你的问题,但是谢天谢地,有人已经回答了删除这一行
fetchRequest.sortDescriptors=[sortDescriptor]
或者传递空数组,比如
this fetchRequest.sortDescriptors=[]
,这实际上可能不起作用。如果这些对象是通过关系获取的,它们将是一个集合而不是有序的。@ReinierMelian这样做之后,列表不是按字母顺序排列的,这很好,但顺序很奇怪,项目不是添加在后面,而是随机添加在中间和其他位置places@user3449976我不明白你的问题,但谢天谢地,有人回答说,您是否为所有现有项目填写了日期,这些项目在您添加日期之前就已经存在?谢谢!成功了。我将日期插入到date属性中,并执行以下操作:let sortDescriptor=NSSortDescriptor(键:“date”,升序:false)。还将此添加到我的另一个文件:@NSManaged var date:NSDateGreat,很高兴提供帮助!您是否为添加日期之前存在的所有现有项目填写了日期?谢谢!成功了。我将日期插入到date属性中,并执行以下操作:let sortDescriptor=NSSortDescriptor(键:“date”,升序:false)。还将此添加到我的另一个文件:@NSManaged var date:NSDateGreat,很高兴提供帮助!非常感谢。这起作用了。我不需要做awakeFromInsert,没有它我工作得很好。我以前从未使用过该属性,因此我将对其进行研究。awakeFromInsert在NSManagedObject的生命周期中仅运行一次,这是它第一次插入到NSManagedObject上下文中。这是一个非常有用的初始化对象的地方,特别是创建日期。感谢您的帮助!我是一个初学者,所以这是非常有用的!非常感谢。这起作用了。我不需要做awakeFromInsert,没有它我工作得很好。我以前从未使用过该属性,因此我将对其进行研究。awakeFromInsert在NSManagedObject的生命周期中仅运行一次,这是它第一次插入到NSManagedObject上下文中。这是一个非常有用的初始化对象的地方,特别是创建日期。感谢您的帮助!我是一个初学者,所以这是非常有用的!