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