objective-c - 获取CoreData中对象的最小日期

标签 objective-c core-data nsdate fetching-strategy

我遇到了与 this question 相同的问题,但 @davedelong 的答案对我不起作用。

当遵循 Apple Example 时,为了获取一组对象中的最小日期,我收到以下错误

-[NSDate count]: unrecognized selector sent to instance

我的理解是,NSExpression的最大值:仅支持NSArray。所以我需要其他解决方案。

@davedelong 建议使用升序的 NSSortDescriptor,所以我这样做了:

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([GCSession class])
                                  inManagedObjectContext:self.objectContext];
fetchRequest.fetchLimit = 1;

NSSortDescriptor* sort = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:YES];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];

GCSession* session = [[self.objectContext executeFetchRequest:fetchRequest error:nil] lastObject];

return session.startDate;

这里的问题是,从 fetch 返回的 session 对象似乎不是 startDate 最小的对象。在我的测试中,它似乎甚至返回了最新日期,但似乎不一致。

我还可以获取每个 GCSession 对象并对它们进行排序,但这似乎太过分了,尤其是当用户使用该应用程序时,GCSession 的数量会增加。

编辑:A test project演示了 Apple 示例代码中的错误。

最佳答案

只有在获取对象后排序才会发挥作用。您已将获取限制设置为 1,并且没有谓词告诉获取“去抓取任何随机的单个 GCSession 对象”。一次获取有一个长度为 1 个元素的数组,然后对其进行排序,这是无用的。

如果您想使用排序来查找最小值或最大值,则必须获取所有对象,然后对它们进行排序。删除线:

fetchRequest.fetchLimit = 1;

…应该允许代码工作。

但是,您应该能够使用表达式获取最小值和最大值。这是一个基本操作。

编辑:查看注释以了解更多详细信息,但如果将后备存储更改为 SQL 而不是 XML,Apple 的示例就可以工作

关于objective-c - 获取CoreData中对象的最小日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278386/

相关文章:

javascript - 值为 "ok"、 false、true、null、123 有效 JSON

c++ - 在 Objective-C 中使用 .mm 文件有哪些怪癖/惊喜?

ios - 核心数据获取结果 Controller 仅在设备上返回空

ios - 为什么这个从 NSString 得到的 NSDate 切换了月份?

ios - NSDate 具有相反的 AM/PM 值

iphone - iOS - UIViewcontroller 检测旋转?

ios - 防止 MKMapView 更改选择(干净地)

swift - 核心数据和表格 View

iphone - 从核心数据调用tableview中的音频

ios - 如何获得毫秒级精度的nsdate?