Swift CoreData:使用 NSSortDescriptor 计算即将到来的生日排序

Posted

技术标签:

【中文标题】Swift CoreData:使用 NSSortDescriptor 计算即将到来的生日排序【英文标题】:Swift CoreData: sort by calculated upcoming birthday with NSSortDescriptor 【发布时间】:2020-12-10 09:00:42 【问题描述】:

在我的 ios 14/Swift 5 应用程序中,我使用 CoreData 来存储 A Friend 实体来存储朋友姓名和生日。 upcoming birthday 返回根据好友生日计算的即将到来的生日。

extension Friend 

    @NSManaged public var birthday: Date
    @NSManaged public var familyName: String?
    @NSManaged public var givenName: String?
    @NSManaged public var id: String?

    public var upcomingBirthday: Date 
        nextBirthday(forBirthday: birthday)
    

我尝试在NSSortDescriptor 中使用“upcomingBirthday”,如下所示:

NSSortDescriptor(key: "upcomingBirthday", ascending: true)

但我收到错误“keypath 'upcomingBirthday' not found in entity”

是否有任何方法可以按即将到来的生日排序,即使它不是直接的 CoreDate 属性,还是我必须获取所有朋友并在获取后排序?

【问题讨论】:

【参考方案1】:

您不能在 Core Data 实体的排序描述符中使用自定义属性作为键(路径)。

NSDate(不是Swift Date)的扩展中声明upcoming作为属性(无参数),然后使用键路径birthday.upcoming

【讨论】:

这行得通吗?我收到同样的错误“原因:'keypathbirthday.updacoming not found in entity Friend”,为什么?我还有一个问题***.com/questions/66730049/…,有什么建议吗?

以上是关于Swift CoreData:使用 NSSortDescriptor 计算即将到来的生日排序的主要内容,如果未能解决你的问题,请参考以下文章

CoreData - 相当于使用带有示例的类别 - Swift

在 Swift 中使用 NSPredicate 对 CoreData 结果进行排序

Swift/IOS/CoreData:如何在自动生成的 CoreData 类中将 var 定义为枚举类型?

如何使用 Swift 删除 coredata 中的特定记录?

Swift 2:使用两个 CoreData 实体填充 TableView

无法使用 Swift 在 CoreData 中访问一对多关系