1

我正在一个名为Todolists. Todoliststodos

我正在尝试获取所有确定的Todolists地方或所在due_at (Date)的地方。<=Datedue_at Datenil

以下谓词可以正常工作,并且可以获取某个日期之前的所有Todolists位置。Todos

NSDate *now = [NSDate date];
int daysToAdd = _dueDateSlider.intValue;
NSDate *datePeriod = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY todos.due_at <= %@", datePeriod];

但是,以下NSPredicate搜索会返回所有结果,即使有些有 a 有due_at Date一些是nil

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY todos.due_at = nil"];

当我搜索表时,它due_at = nil似乎工作正常,但在连接搜索中执行时却不行。NSPredicateTodos

目标是完成这项工作:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY todos.due_at <= %@ OR todos.due_at = nil", datePeriod];

如何谓词搜索连接表中的 nil 值?

=======更新======

我试图用它作为我的谓词:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(todos.due_at <= %@) || (todos.due_at = nil)", datePeriod];

但这会导致此错误:

-[__NSArrayI compare:]: unrecognized selector sent to instance 0x1001e36b0
4

1 回答 1

1

我最终在通过运行 fetchRequest 返回的 NSArray 上运行 NSPredicate。

// get all todolists from database
NSArray *todolists = [managedObjectContext executeFetchRequest:request error:&error];

// then filter using ALL and ANY
todolists = [todolists filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(ANY todos.due_at <= %@) || (ALL todos.due_at = nil)", datePeriod]];
于 2013-03-25T01:25:11.153 回答