IOS/Objective-C/Core 数据:具有复杂条件逻辑的 NSPredicates
IOS/Objective-C/Core Data: NSPredicates with Complicated Conditional logic
我正在使用 NSPredicate 来过滤 coredata 中的实体。 Apple 和其他人提供的大多数示例都没有体现您可以在 SQL 中执行的复杂逻辑,但由于谓词解析为 sql,在我看来,可能比容易看到的更多在苹果文档中。
特别是,如果某个属性为真,我想按一个日期过滤托管对象,如果属性为假,我想按更早的日期过滤。
类似于:
NSDate *now = [NSDate date];
NSDate *lastYear = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitYear value:-1 toDate:now options:0];
NSPredicate *myPred= [NSPredicate predicateWithFormat:@"new==1 ? date >= %@ :date>=%@", now,lastYear];
有什么方法可以将条件逻辑放入 NSPredicate 中吗?
这应该可以通过以下格式实现
@"(new == 1 AND date >= %@) OR (new == 0 AND date >= %@)", now, lastYear
希望对您有所帮助。
试试这个
[NSPredicate predicateWithFormat:@"(new == 1 AND date >= %@) OR (new == 0 AND date >= %@)", now, lastYear];
我正在使用 NSPredicate 来过滤 coredata 中的实体。 Apple 和其他人提供的大多数示例都没有体现您可以在 SQL 中执行的复杂逻辑,但由于谓词解析为 sql,在我看来,可能比容易看到的更多在苹果文档中。
特别是,如果某个属性为真,我想按一个日期过滤托管对象,如果属性为假,我想按更早的日期过滤。
类似于:
NSDate *now = [NSDate date];
NSDate *lastYear = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitYear value:-1 toDate:now options:0];
NSPredicate *myPred= [NSPredicate predicateWithFormat:@"new==1 ? date >= %@ :date>=%@", now,lastYear];
有什么方法可以将条件逻辑放入 NSPredicate 中吗?
这应该可以通过以下格式实现
@"(new == 1 AND date >= %@) OR (new == 0 AND date >= %@)", now, lastYear
希望对您有所帮助。
试试这个
[NSPredicate predicateWithFormat:@"(new == 1 AND date >= %@) OR (new == 0 AND date >= %@)", now, lastYear];