使用 InterfaceBuilder 在 NSTableView 和 CoreData 中按日期搜索记录

Search records by DATE in NSTableView and CoreData using InterfaceBuilder

我有一个 NSTableView,它使用 ArrayController 从 CoreData 中提取数据。在我的表单中,我也有搜索字段。

搜索表单在以下情况下工作正常:

  1. 我 select 搜索字段,在谓词下的绑定检查器中,我将搜索字段绑定到用于获取 nstableview 中的数据的数组控制器。

  2. 在谓词格式字段中我添加了

    customerName 包含[cd] $value 或 customerWebsite 包含[cd] $value

所以现在我搜索 customerName (STRING) 或 customerWebsite (STRING),得到的结果都很好。

但是,如果我用包含 DATE 的字段更改字段,我的搜索将不起作用。例如,下面的注释不起作用:

contractExpiresOn contains[cd] $value
contractExpiresOn == $value
contractExpiresOn = $value
contractExpiresOn >= $value
contractExpiresOn > $value
contractExpiresOn %LIKE $value
//contractExpiresOn is DATE

当我使用上述谓词格式进行搜索时,应用程序不会崩溃,但不会返回任何结果,即使我的日期以 0 开头,只要我在搜索字段中键入 0,NSTableView是空的。

任何人都可以告诉我如何通过界面生成器进行搜索以使用日期,或者如果这不可能,我该如何以编程方式进行。

您不能将日期与字符串进行比较,您必须进行一些编程。在 NSDate 上创建一个类别,并添加一个将日期转换为字符串的方法。 例如:

@implementation NSDate(Search)

static NSDateFormatter *searchDateFormatter = nil;

- (NSString *)searchString {
    if (!searchDateFormatter) {
        searchDateFormatter = [[NSDateFormatter alloc] init];
        searchDateFormatter.dateStyle = NSDateFormatterShortStyle;
        searchDateFormatter.timeStyle = NSDateFormatterNoStyle;
    }
    return [searchDateFormatter stringFromDate:self];
}

@end

谓词格式为birthday.searchString contains $value.