NSPredicate使用nil值搜索连接表

时间:2013-03-25 00:16:25

标签: ios objective-c sqlite nspredicate

我在名为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

但是,以下due_at Date搜索会返回所有结果,即使某些搜索结果为nil且某些搜索结果为NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY todos.due_at = nil"];

due_at = nil

NSPredicate似乎在我Todos搜索NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY todos.due_at <= %@ OR todos.due_at = nil", datePeriod]; 表时正常,但在联接搜索中执行时却没有。

目标是让这项工作:

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

如何在连接表中搜索nil值?

======= UPDATE ==

我试图将此作为我的谓词:

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

但会导致此错误:

{{1}}

1 个答案:

答案 0 :(得分: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]];