我遇到与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示例代码中的错误。
答案 0 :(得分:3)
只有在获取对象后才会发挥作用。你已经设置了一个读取限制,没有谓词告诉提取“去抓取任何随机的单个GCSession对象”。一个fetch有一个数组1元素长,然后对它进行排序,这是无用的。
如果要使用排序来查找最小值或最大值,则必须获取所有对象然后对其进行排序。删除行:
fetchRequest.fetchLimit = 1;
...应该允许代码工作。
但是,您应该能够使用表达式获取最小值和最大值。这是一种基本操作。
编辑:查看注释以获取更多详细信息,但如果将后备存储更改为SQL而不是XML,Apple的示例可以正常工作