Ich habe Core Data-Datenbank. Struktur auf dem Bild ist (DBContact viele DBMessages haben mit Eigentum messages
, die jeweils DBMessage haben einen Kontakt mit Immobilien contact
):NSFetchedResultsController mit Tabelle wie iMessage
Ich möchte durch den Kontakt und sortiert nach Datum gruppiert Nachrichten anzuzeigen. Die Anzahl der Zeilen muss also = Anzahl der Kontakte mit Nachrichten sein. Und in jeder Zeile muss ich den Avatar, den Namen und den Namen des Kontakts sowie den Text und das Datum der letzten Nachricht dieses Kontakts anzeigen.
Die einzige Lösung, die ich gefunden ist:
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
}
aber in diesem Fall Kontakte werden durch ID sortiert werden, aber ich brauche sie nach dem Datum der letzten Nachricht zu sortieren. Aber wenn ich sortDescriptors in fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false), NSSortDescriptor(key: "contact.id", ascending: false)]
ändere, um zuerst nach Datum zu sortieren, werden die Kontakte nicht korrekt angezeigt. Hat jemand Ideen, wie man das umsetzt?
vielen Dank –
aber ich brauche Filter nach Datum und Art der Bestellung, so wird diese Implementierung nicht funktionieren. Kannst du einen anderen Ratschlag geben? –
Was meinst du Art der Bestellung? Sie können weiterhin ein Prädikat anwenden, das das Datum verwendet. – Wain