使用InterfaceBuilder在NSTableView和CoreData中搜索DATE记录

时间:2016-03-18 03:18:56

标签: objective-c cocoa nstableview predicate nssearchfield

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

如果符合以下条件,搜索表单就可以了:

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

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

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

  3. 所以现在我搜索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是空的。

    任何人都可以告诉我如何通过界面构建​​器使我的搜索与日期一起工作,或者如果不可能,我该如何以编程方式执行此操作。

1 个答案:

答案 0 :(得分:1)

您无法将日期与字符串进行比较,您必须进行一些编程。在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