【问题标题】:Grouping core data with NSFetchedResultsController in swift在 swift 中使用 NSFetchedResultsController 对核心数据进行分组
【发布时间】:2015-12-22 22:38:40
【问题描述】:

我正在使用 NSFetchedResultsController 显示核心数据。下面是我的 CoreData 类

class Item: NSManagedObject {
    @NSManaged var category: String
    @NSManaged var dateAdded: NSDate
    @NSManaged var image: String
    @NSManaged var name: String
    @NSManaged var subCategory: String
}

我想分组显示所有项目。项目将根据添加日期的月份进行分组。也就是说,section header 会显示月份,row 会显示当月添加的项目。

下面是我的 NSFetchedResultsController 代码

var fetchedResultsController: NSFetchedResultsController = {
    let fetchRequest = NSFetchRequest(entityName: "Item")

    let sort = NSSortDescriptor(key: "dateAdded", ascending: false)
    fetchRequest.sortDescriptors = [sort]

    fetchRequest.fetchBatchSize = 20

    let result = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.appDelegate.childManagedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
    result.delegate = self

    return result
}()

我怎样才能做到这一点。任何帮助将不胜感激。

提前致谢

【问题讨论】:

标签: swift core-data nsfetchedresultscontroller


【解决方案1】:

我解决了

class Item: NSManagedObject {
    @NSManaged var category: String
    @NSManaged var dateAdded: NSDate
    @NSManaged var image: String
    @NSManaged var name: String
    @NSManaged var subCategory: String

    var groupByMonth: String{
    get{
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "MMM yyyy"
        return dateFormatter.stringFromDate(self.dateAdded)
    }
}

var fetchedResultsController: NSFetchedResultsController = {
    let fetchRequest = NSFetchRequest(entityName: "Item")

    let sort = NSSortDescriptor(key: "dateAdded", ascending: false)
    fetchRequest.sortDescriptors = [sort]

    fetchRequest.fetchBatchSize = 20

    let result = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.appDelegate.childManagedObjectContext!, sectionNameKeyPath: groupByMonth, cacheName: nil)
    result.delegate = self

    return result
}()

【讨论】:

  • 这是一个拥有计算属性的更简洁的解决方案
  • 对于较新版本的swift,需要在groupByMonth开头添加@objc
【解决方案2】:

最简单的方法是添加属性dateAddedMonth 来存储您的NSDate 仅与月份。然后您可以将sectionNameKeyPath 设置为"dateAddedMonth"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2011-01-02
    相关资源
    最近更新 更多