【问题标题】:Custom sorting using categories and core data - is it supported by the framework?使用类别和核心数据进行自定义排序 - 框架是否支持?
【发布时间】:2011-03-28 04:45:19
【问题描述】:

我正在为 iPhone iOS 4.0 进行开发,并且我有一个使用 Core Data 存储的生日对象列表(日期 + 姓名)。我想使用 NSFetchedResultsController 来检索按每个生日对象的 next 生日日期排序的列表。为此,我需要为排序描述符定义自己的逻辑。

我尝试使用:

[NSSortDescriptor sortDescriptorWithKey:@"birthdayDate" 
                              ascending:YES 
                               selector:@selector(compareNextBirthday:)];

compareNextBirthday: 是在我在 NSDate 类上创建的类别中定义的。

但是当我尝试获取数据时,我收到以下错误:“不支持的 NSSortDescriptor 选择器:compareNextBirthday:”

我花了好几个小时试图解决这个问题……Core Data 是否支持这种自定义排序?我真的需要进行内存排序吗?

【问题讨论】:

    标签: objective-c sorting core-data nssortdescriptor


    【解决方案1】:

    NSFetchedResultsController 内部的排序是在持久存储级别执行的,因此如果您使用 SQLite 作为后端,它将失败。

    对于这样的事情,我会去规范化数据并存储月份和日期以及实际出生日期,以便您可以对它们进行排序。

    【讨论】:

    • 给定月份和月份字段,如果 NSSortDescriptor 给出从今天开始到昨天结束的顺序,会是什么样子?我没有看到明显的解决方案。
    • 没有办法像这样在持久存储级别进行排序。您需要将它们拉入内存以适应这种类型的逻辑。您可以通过对数据进行反规范化来进行过滤。
    • 但这正是问题所在,不是吗?我看不出非规范化对这里的发帖人有何帮助。
    • 问题是“为什么这不起作用”并得到了回答。按下一个生日排序可以通过对数据进行非规范化来完成,因为它从等式中删除了年份。根据他的应用需求,他可以从那里进行探索。
    • 感谢您的回答 - 问题是核心数据是否支持使用类别选择器进行自定义排序 - 看来我得到的答案不是。但是,替代解决方案无效。最终我所做的是在 NSFetchedREsultsController 获取之前计算下一个生日日期,将其保存到存储中的对象并使用此属性进行排序。我发现它比在内存中排序更有效。
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多