gpt4 book ai didi

objective-c - 我该如何做NSPredicate代码?

转载 作者:行者123 更新时间:2023-12-01 18:00:15 25 4
gpt4 key购买 nike

我在使用NSPredicate时遇到麻烦。我有一个名为Entry的核心数据对象,其中包含一个名为creationDate的NSDate。我想将此与我称为date的变量进行比较。

我正在使用NSDate类别提取两个对象的年份,并使用一个核心数据类别对我的核心数据存储区中的所有Entry对象执行谓词。

[Entry allForPredicate:[NSPredicate predicateWithFormat:@"creationDate.year == %i",  date.year]];

我认为这是错误的,因为它没有给我期望的结果,而是变成空白。

我在哪里错呢?

最佳答案

我怀疑,核心数据在创建原始数据库调用时会合并类别。

对于您的案例,请创建2个日期,其中一个日期是今年1月1日的0:00,一年后

 NSString *basePredicateString = @"creationDate >= %@ AND creationDate < %@";
NSPredicate *predicate = [NSPredicate predicateWithFormat:basePredicateString, startDate, endDate];

为了完整起见,我将如何生成实际年份的开始和结束日期:
NSDate *startDate = [NSDate date];
[[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit startDate:&startDate interval:NULL forDate:startDate];

NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
comps.year = 1;
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:startDate options:0];

jbrennan在此答案下面的评论中建议,确实可以将一个类别合并到谓词中。尽管他很适合作为NSArrays的集合(他添加了一个测试项目的链接),但在涉及到核心数据获取请求时,它不起作用-至少我无法使其正常工作。我试过了。这是我的测试: https://github.com/vikingosegundo/CoreDataCategoryTest

关于objective-c - 我该如何做NSPredicate代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954273/

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