【问题标题】:Core Data sort descriptor with NSDate, iOS with Swift使用 NSDate 的核心数据排序描述符,使用 Swift 的 iOS
【发布时间】:2015-05-28 16:17:08
【问题描述】:

我正在尝试根据日期属性过滤核心数据对象。

这是我当前的代码:

func getFetchedResultController(selectedEntity: NSString){

    let appDelegate : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedObjectContext: NSManagedObjectContext = appDelegate.managedObjectContext!

    let fetchRequest = NSFetchRequest()

    let entity = NSEntityDescription.entityForName(selectedEntity as String, inManagedObjectContext: managedObjectContext)

    fetchRequest.entity = entity

    fetchRequest.fetchBatchSize = 20

    let date = NSDate()

    let sectionSortDescriptor = NSSortDescriptor(key: "timeStamp < %@",date)

    let sortDescriptors = [sectionSortDescriptor] //, secondSortDescriptor]

    fetchRequest.sortDescriptors = sortDescriptors

    let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)

    aFetchedResultsController.delegate = self
    self.fetchedResultsController = aFetchedResultsController

    var error: NSError? = nil
    if !self.fetchedResultsController.performFetch(&error) {
        abort()
    }

 print(fetchedResultsController.fetchedObjects?.count ?? 0)
}

但我在行出现错误:

let sectionSortDescriptor = NSSortDescriptor(key: "timeStamp < %@",date)

我应该如何更改此排序描述符以获取在“timeStamp”属性上具有较旧或较新日期的对象?

谢谢。

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    要获取满足某些条件的所有对象,您不需要 排序描述符但一个谓词,例如:

    let predicate = NSPredicate(format: "timeStamp < %@", date)
    fetchRequest.predicate = predicate
    

    您需要一个排序描述符来按指定顺序获取对象, 例如:

    let sectionSortDescriptor = NSSortDescriptor(key: "timeStamp", ascending: true)
    let sortDescriptors = [sectionSortDescriptor]
    fetchRequest.sortDescriptors = sortDescriptors
    

    【讨论】:

    • ¿如何更改指定顺序(排序描述符)并刷新 NSFetchedResultsController 以显示结果?
    【解决方案2】:

    Swift 3.0 这对我来说没有问题

    let fec:NSFetchRequest = YourEntity.fetchRequest()
    let sortDescriptor = NSSortDescriptor(key: "type", ascending: true)
    fec.sortDescriptors = [sortDescriptor]
    let items = try! context.fetch(fec)
    

    【讨论】:

      【解决方案3】:

      >Swift4

      func getLastDateFromEntries(entityName:String) -> [NSManagedObject]{
          let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
          do {
              let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
              let sortDescriptors = NSSortDescriptor(key: "dueDate", ascending: false) // dueDate is key
              fetchRequest.sortDescriptors = [sortDescriptors]
              fetchRequest.fetchLimit = 1 // add limit
              let fetchedResults = try context.fetch(fetchRequest) as! [NSManagedObject]
              return fetchedResults
          }
          catch {
              print ("fetch task failed", error)
              return []
          }
          
      }
      

      【讨论】:

        猜你喜欢
        • 2013-01-12
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        相关资源
        最近更新 更多