У меня есть база данных Core Data. Структура находится на изображении (DBContact много DBMessages с имуществом messages
, каждый DBMessage есть один контакт со свойством contact
):NSFetchedResultsController с таблицей, подобной iMessage
Я хочу для отображения сообщений, сгруппированных по контакту и упорядоченные по дате. Таким образом, количество строк должно быть = количество контактов с сообщениями. И в каждой строке я должен отображать аватар, имяAndSurname контакта и текст и дату последнего сообщения этого контакта.
Единственное решение, которое я нашел это:
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
}
Но в этом случае контакты будут отсортированы по идентификатору, но мне нужно, чтобы отсортировать их по дате последнего сообщения. Но если я изменил sortDescriptors на fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false), NSSortDescriptor(key: "contact.id", ascending: false)]
, чтобы отсортировать по дате сначала, он не отобразит контакты должным образом. У кого-нибудь есть идеи, как это реализовать?
спасибо большое –
, но мне нужно иметь фильтр по дате и типу заказа, поэтому эта реализация не будет работать. Можете ли вы посоветоваться? –
Что значит тип заказа? Вы можете применить предикат, который использует дату. – Wain