我遇到了与 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/