Ios 自定义NSSortDescriptor按日期排序,同时忽略时间

Ios 自定义NSSortDescriptor按日期排序,同时忽略时间,ios,swift,core-data,Ios,Swift,Core Data,我正在实现一个简单的CoreData支持的表视图,它加载我希望按日期排序的对象。使用一个简单的降序日期NSSortDescriptor将导致对单元格进行排序和排序。我想要的是对单元格进行排序和排序 我有一个解决方案,它存储两个日期属性,一个同时具有时间和日期,另一个仅具有日期。但我不想保留两个单独的属性。i、 e.我希望按日期排序,同时忽略时间值,而只存储一个日期属性 是否有任何自定义NSSortDescriptor可供我编写以实现此行为 以下是我的NSManagedObject扩展及其属性:

我正在实现一个简单的CoreData支持的表视图,它加载我希望按日期排序的对象。使用一个简单的降序日期NSSortDescriptor将导致对单元格进行排序和排序。我想要的是对单元格进行排序和排序

我有一个解决方案,它存储两个日期属性,一个同时具有时间和日期,另一个仅具有日期。但我不想保留两个单独的属性。i、 e.我希望按日期排序,同时忽略时间值,而只存储一个日期属性

是否有任何自定义NSSortDescriptor可供我编写以实现此行为

以下是我的NSManagedObject扩展及其属性:

extension AuthenticationKey{
@nonobjc公共类func fetchRequest()->NSFetchRequest{
返回NSFetchRequest(entityName:“AuthenticationKey”)
}
@NSManaged public var createdDate:日期
@NSManaged公共变量id:UUID
@NSManaged公共变量isfavorite:Bool
@NSManaged公共var密钥:字符串
@NSManaged公共变量名称:String
@NSManaged public var createdTime:日期
}
这是我的NSFetchedResultsController:

让fetchedResultsController:NSFetchedResultsController={
let request=AuthenticationKey.fetchRequest
request.sortDescriptors=[
NSSortDescriptor(
密钥路径:\AuthenticationKey.createdDate,
升序:假
)
]
返回NSFetchedResultsController(
fetchRequest:request,
managedObjectContext:CoreDataManager.shared.managedObjectContext,
sectionNameKeyPath:“createdDate”,
cacheName:nil
)
} ()
当前,
createdDate
仅存储日期,而
createdTime
存储时间和日期。我希望能够只有一个日期属性,即既有日期又有时间的
createdDate
,但排序描述符将只按日期排序,而忽略时间

下面是一个示例
AuthenticationKey
对象:

{
    "id": "6C9570F1-7539-44AC-9ED8-95ADB2CEC846",
    "createdDate": "2019-11-23 00:00:00 +0000",
    "isFavourite": false,
    "key": "oB+peCQ88rSE6dVs14x2X+T0QNwSY4CMrM1fu8WR",
    "name": "Key 298",
    "createdTime": "2019-11-23 12:20:18 +0000"
}

解是一种计算属性

@objc var startOfDay : Date {
    return Calendar.current.startOfDay(for: theDate)
}

并将其用作排序条件。

这会导致此错误:
无法从KeyPath中提取字符串
您编写了按日期排序的代码,因此我假设您正在讨论
日期
实例。我更新了答案,现在我明白了。问题在于
sectionNameKeyPath
属性。查看更新后的答案。您发布的第一个答案中是否有
@objc
,即带有
startOfDay
计算属性的答案?因为当我第一次实现您的解决方案时,我没有将
startOfDay
标记为
@objc
,这似乎就是我在第一条评论中提到的关键路径错误的原因。这一次我这么做了,它修复了密钥路径错误,并且完全按照我的预期工作!不,第一个答案没有@objc。当我看到fetchresults控制器的初始化时,我添加了它。