2016-03-18 7 views
0

У меня есть NSTableView, который извлекает данные из CoreData с помощью ArrayController. В моей форме у меня также есть поле поиска.Поиск записей по DATE в NSTableView и CoreData с использованием InterfaceBuilder

Форма поиск работает просто отлично, если:

  1. Я выбираю поле поиска, а в связывании инспектора под предикатом Я связываю поле поиска контроллера массива, который используется для получения данных в NSTableView.

  2. В поле Формат сказуемое добавить

    CUSTOMERNAME содержит [кд] $ значение или customerWebsite содержит [кд] $ значение

Так что теперь я или искать 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

Вы не можете сравнивать дату со строкой, и вам нужно сделать некоторые программы. Создайте категорию в 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.

+0

Работает как очарование .... но можно ли это просто добавить эту функцию в мой файл m вместо использования категории? Не то, чтобы это беспокоило меня использовать категорию, просто пытаясь узнать немного вещей .... @ Willeke – user2417624

+0

Категория расширяет функциональность NSDate. Когда вы добавите метод в ваш .m-файл, он будет добавлен к вашему классу вместо NSDate. – Willeke