在 swift 中使用 NSFetchedResultsController 对核心数据进行分组
Grouping core data with NSFetchedResultsController in swift
我正在使用 NSFetchedResultsController 显示核心数据。下面是我的 CoreData class
class Item: NSManagedObject {
@NSManaged var category: String
@NSManaged var dateAdded: NSDate
@NSManaged var image: String
@NSManaged var name: String
@NSManaged var subCategory: String
}
我想分组显示所有项目。项目将根据添加日期的月份进行分组。即 header 部分将显示月份,行将显示当月添加的项目。
下面是我的 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
}()
我怎样才能做到这一点。任何帮助将不胜感激。
提前致谢
最简单的方法是添加属性 dateAddedMonth
以仅用月份存储您的 NSDate
。然后您可以将 sectionNameKeyPath
设置为 "dateAddedMonth"
。
我解决了
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
}()
我正在使用 NSFetchedResultsController 显示核心数据。下面是我的 CoreData class
class Item: NSManagedObject {
@NSManaged var category: String
@NSManaged var dateAdded: NSDate
@NSManaged var image: String
@NSManaged var name: String
@NSManaged var subCategory: String
}
我想分组显示所有项目。项目将根据添加日期的月份进行分组。即 header 部分将显示月份,行将显示当月添加的项目。
下面是我的 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
}()
我怎样才能做到这一点。任何帮助将不胜感激。
提前致谢
最简单的方法是添加属性 dateAddedMonth
以仅用月份存储您的 NSDate
。然后您可以将 sectionNameKeyPath
设置为 "dateAddedMonth"
。
我解决了
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
}()