Swift NSFetchRequest谓词按日期排序,仅使用时间组件
想想iPhone上的闹钟应用程序,闹钟是按时间排序的。假设这些警报存储在核心数据中,日期组件是它们创建的实际日期,但时间组件由日期选择器选择。因此,在获取这些数据时,您需要忽略日期组件,只按时间对它们进行排序 如果所有报警均在同一日期创建,则此操作有效:Swift NSFetchRequest谓词按日期排序,仅使用时间组件,swift,core-data,nsdate,nspredicate,nsfetchrequest,Swift,Core Data,Nsdate,Nspredicate,Nsfetchrequest,想想iPhone上的闹钟应用程序,闹钟是按时间排序的。假设这些警报存储在核心数据中,日期组件是它们创建的实际日期,但时间组件由日期选择器选择。因此,在获取这些数据时,您需要忽略日期组件,只按时间对它们进行排序 如果所有报警均在同一日期创建,则此操作有效: fetchRequest.sortDescriptors = [NSSortDescriptor(key: date, ascending: true)] 但是,如果它们是在不同的日期创建的,那么首先创建的显然会按日期列出,并在每个日期组中按
fetchRequest.sortDescriptors = [NSSortDescriptor(key: date, ascending: true)]
但是,如果它们是在不同的日期创建的,那么首先创建的显然会按日期列出,并在每个日期组中按时间排序。在进行排序时,我想完全忽略日期组件,只按时间组件排序。- 在NSManagedObject子类中创建全局日期格式化程序
let timeFormatter : DateFormatter = { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.dateFormat = "HH:mm:ss" return formatter }()
- 和计算属性
@objc var time : String { return timeFormatter.string(from: date) }
- 然后获取未排序的记录并手动排序
let sortedRecords=records.sorted{$0.time<$1.time}
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“实体中未找到关键路径时间”
我是否也需要在模型编辑器中添加“时间”?谢谢。不过,我使用的是NSFetchedResultsController,它似乎没有机会对这样的记录进行排序。我将如何对此进行修改?
let sortedRecords = records.sorted{ $0.time < $1.time }