gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:15:43 25 4
gpt4 key购买 nike

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

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

-[NSDate count]: unrecognized selector sent to instance

我的理解是 NSExpression 's max: 仅支持 NSArray s。所以我需要其他解决方案。

@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当用户使用该应用程序时,数量将会增加。

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

最佳答案

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

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

fetchRequest.fetchLimit = 1;

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com