【发布时间】:2016-06-17 06:15:26
【问题描述】:
我有核心数据数据库。结构在图像上(DBContact 有许多属性为messages 的DBMessage,每个DBMessage 有一个属性为contact 的联系人):
我想显示按联系人分组并按日期排序的消息。所以行数必须是 = 有消息的联系人数。在每一行中,我必须显示头像、联系人的姓名和姓氏以及此联系人的最后一条消息的文本和日期。
我找到的唯一解决方案是:
let entityName = kDBOrder
let entityDescription = NSEntityDescription.entityForName(entityName, inManagedObjectContext: managedObjectContext)
let fetchRequest = NSFetchRequest()
fetchRequest.entity = entityDescription
fetchRequest.fetchBatchSize = 20
// sort
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "contact.id", ascending: false), NSSortDescriptor(key: "date", ascending: false)]
let sectionNameKeyPath: String? = "contact.id"
self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: sectionNameKeyPath, cacheName: nil)
fetchedResultsController!.delegate = self
if tableViewMain != nil {
do {
try fetchedResultsController!.performFetch()
} catch {
print("An error occurred in fetchresultcontroller")
}
tableViewMain.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var count = 0
if let sections = fetchedResultsController?.sections {
let currentSection = sections[section]
count = currentSection.numberOfObjects
// in each section we must have only 1 row
if count > 0 {
count = 1
}
}
return count
}
但在这种情况下,联系人将按 id 排序,但我需要按最后一条消息的日期对它们进行排序。但是,如果我将 sortDescriptors 更改为 fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false), NSSortDescriptor(key: "contact.id", ascending: false)] 以首先按日期排序,它将无法正确显示联系人。
有人知道如何实现吗?
【问题讨论】:
标签: ios swift core-data nsfetchedresultscontroller nsfetchrequest