등의 엔터티가있는 Appointment
엔터티를 가진 UITableViewController
을 제공하는 NSFetchedResultsController
이 있습니다.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 –
Jon이 말했듯이, 나는 사용할 수 없다. 그,하지만 내게 또 다른 해결책을 생각하게 만들었고, 가져 오기 전에 정렬 디스크립터로 정렬했다. 이제 누군가가보기를 열 때마다 설정되는 '주문'속성을 갖게되었습니다. 결코 10 분의 1 이상의 약속이 아니므로 성능 문제는 볼 수 없습니다. 감사합니다 – Arjan
@ Sergey FYI 당신의 대답은 내가 원하는 것을 정확하게하지 못했습니다. 직접 구현했지만 원하는 경우 대답을 업데이트 할 수 있습니다. – Arjan