如何进行 CoreData 排序

Posted

技术标签:

【中文标题】如何进行 CoreData 排序【英文标题】:How to make a CoreData sort 【发布时间】:2019-01-28 19:28:13 【问题描述】:

我正在使用 CoreData 构建应用程序。我想按日期对我的 CoreData 数据进行排序。我已经尝试过了:

func getData() 
  let request = NSFetchRequest<Session>(entityName: "Session")
  let sort = NSSortDescriptor(key: "date", ascending: false)
  request.sortDescriptors = [sort]

  do 
    sessions = try contains.viewContext.fetch(request)
    print("Got \(sessions.count) sessions")
    tableView.reloadData()
   catch 
    print("Fetch failed")
  

但它显示以下错误:Use of unresolved identifier 'NSFetchRequest' by the request

【问题讨论】:

添加import CoreData 然后我得到一个新的失败“类型值'(UIFocusEnvironment)-> Bool'没有成员'viewContext'” contains.viewContext 应该是核心数据堆栈的NSManagedObjectContext 实例 这是什么意思?抱歉,我是编程新手。 这取决于您的核心数据堆栈所在的位置。 【参考方案1】:

首先,您需要一个NSManagedContext,它可能类似于:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

当然还有一个用于返回的NSManagedObjects 的变量:

var sessions: [NSManagedObject] = []

那么你需要这样使用它:

func loadQuotes() 
   let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Session")
   let sort = NSSortDescriptor(key: "date", ascending: false)
   fetchRequest.sortDescriptors = [sort]
   do 
      sessions = try context.fetch(fetchRequest)
       catch let error as NSError 
      print("Fetch failed")
   

【讨论】:

以上是关于如何进行 CoreData 排序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用coredata从上到下对tableview项目进行排序

使用 NSSortDescriptor 按时间倒序对 CoreData 进行排序

CoreData:使用 IN 基于谓词/数组进行排序

在 Swift 中使用 NSPredicate 对 CoreData 结果进行排序

对支持 CoreData 的 NSArrayController 进行排序时遇到问题

使用 NSComparisonResult 对 CoreData 实体进行排序