Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSFetchRequest谓词按日期排序,仅使用时间组件_Swift_Core Data_Nsdate_Nspredicate_Nsfetchrequest - Fatal编程技术网

Swift NSFetchRequest谓词按日期排序,仅使用时间组件

Swift NSFetchRequest谓词按日期排序,仅使用时间组件,swift,core-data,nsdate,nspredicate,nsfetchrequest,Swift,Core Data,Nsdate,Nspredicate,Nsfetchrequest,想想iPhone上的闹钟应用程序,闹钟是按时间排序的。假设这些警报存储在核心数据中,日期组件是它们创建的实际日期,但时间组件由日期选择器选择。因此,在获取这些数据时,您需要忽略日期组件,只按时间对它们进行排序 如果所有报警均在同一日期创建,则此操作有效: fetchRequest.sortDescriptors = [NSSortDescriptor(key: date, ascending: true)] 但是,如果它们是在不同的日期创建的,那么首先创建的显然会按日期列出,并在每个日期组中按

想想iPhone上的闹钟应用程序,闹钟是按时间排序的。假设这些警报存储在核心数据中,日期组件是它们创建的实际日期,但时间组件由日期选择器选择。因此,在获取这些数据时,您需要忽略日期组件,只按时间对它们进行排序

如果所有报警均在同一日期创建,则此操作有效:

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 }