2

我和这个问题有同样的问题,但@davedelong 的答案对我不起作用。

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

-[NSDate count]: unrecognized selector sent to instance

我的理解是NSExpression's max: only support NSArrays. 所以我需要另一个解决方案。

@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;

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

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

编辑一个测试项目,演示 Apple 示例代码中的错误。

4

1 回答 1

3

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

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

fetchRequest.fetchLimit = 1;

...应该允许代码工作。

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

编辑:查看评论以获取更多详细信息,但如果您将后备存储更改为 SQL 而不是 XML,Apple 的示例可以工作

于 2011-09-02T05:30:55.977 回答