私はコアデータデータベースを持っています。私は接触によってグループ化され、日付順にメッセージを表示したいNSFetchedResultsController iMessageのようなテーブル
:構造は、画像の上にある(DBContactプロパティmessages
と多くのDBMessagesを持って、各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)]
に変更すると、連絡先が正しく表示されません。 これを実装する方法を知っている人はいますか?
ありがとうございます。 –
ありがとうございますが、日付と種類の順序でフィルタを設定する必要があります。この実装は機能しません。他のアドバイスはできますか? –
注文の種類はどういう意味ですか?日付を使用する述部を適用することはできます。 – Wain