私はUITableViewController
にAppointment
の属性を持つエンティティdateTime
を提供するNSFetchedResultsController
を持っています。昨日 NSSortDescriptorで並べ替える(今日または前)NSSortDescriptorで並べ替え
前
- 今日 は
- 明日
- 日は明日
- 後の昨日
- 日:
私の目標は次のようにソートされた予定のリストを持つことですつまり、 最初のsorそれが今日の前後かどうかについては、
dateTime
です。だから(dateTime > %TODAY%)
で最初にソートし、次にdateTime
(将来の昇順、降順で降順)でソートします。これを行う方法はありますか?私の問題は、ソート記述子で%TODAY%を使用することはできませんが、同じ視覚的結果を得るための別の方法があるかもしれません。
更新:
NSFetchedResultsController
で受け入れられた回答はできません。私は、ビューを表示する前にAppointments
を注文し、それをデータベースに保存して、NSFetchedResultsController
に変更を反映させる別の解決方法を選択しました。更新2: 受け入れられた答えは、私が欲しかったものを正確にしました。私の実装:
let futureAppointments = appointments.filter({ $0.dateTime != nil && $0.dateTime?.compare(Date()) == .orderedDescending }) .sorted(by: { $0.dateTime?.compare($1.dateTime! as Date) == .orderedAscending }) let pastAppointments = appointments.filter({ $0.dateTime != nil && $0.dateTime?.compare(Date()) == .orderedAscending }) .sorted(by: { $0.dateTime?.compare($1.dateTime! as Date) == .orderedDescending }) let sorted = futureAppointments + pastAppointments for (index, appointment) in sorted.enumerated() { appointment.order = NSNumber(integerLiteral: index) }
fetchRequestでブロックベースのソート記述子を使用することはできません。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/PersistentStoreFeatures.html#//apple_ref/doc/uid/TP40001075-CH23-SW1 –
ジョンさんのように、私は使用できませんしかし、それは私に別の解決策を考えさせ、フェッチの前にあなたのソート記述子で注文しました。今私は誰かがビューを開くたびに設定されるプロパティ 'order'を持っています。それは決して10以上の予定ではないので、私はパフォーマンスの問題を見ません。ありがとうございました – Arjan
@ Sergey FYIあなたの答えは私が望んでいたものとまったく同じではありませんでした。自分で実装しましたが、必要に応じて、あなたの答えを更新することができます。 – Arjan