2013-06-18 2 views
0

Я бью голову против стены, пытаясь получить функцию регулярного выражения для работы с излучением CoreData. У меня есть атрибут с именем maps на подклассе NSManagedObject, который я пытаюсь фильтровать. Этот атрибут maps является строка со списком значений идентификаторов типа так:Настройка предиката регулярного выражения CoreData для списка, разделенного запятой

1,10,12,8

Вот как мой предикат строится:

NSString *format = [NSString stringWithFormat: @"(maps matches '.*\\b%@\\b.*')", _map.mapID]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:format]; 
[request setPredicate:predicate]; 

NSManagedObjectContext *moc = [[RKManagedObjectStore defaultObjectStore] primaryManagedObjectContext]; 
_resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                 managedObjectContext:moc 
                  sectionNameKeyPath:@"name.stringGroupByFirstInitial" 
                    cacheName:nil]; 

Я построил RegEx, используя этот Rubular пример: http://rubular.com/r/zELaz19x0T

Значение mapID представляет собой целое число в виде строки.

Я прочитал другие вопросы о SO о совпадении предикатов со всей строкой, но я чувствую, что с этим шаблоном следует обращаться с этим шаблоном, используя .* в начале и конце шаблона.

Результат этого кода всегда возвращает нулевые результаты. Если предикат не используется, все объекты возвращаются, как ожидалось. Кто-нибудь может понять, в чем проблема? Благодаря!

ответ

0

Это решается с этим кодом:

NSString *format = @"(maps MATCHES %@) OR (maps == '')"; 
NSString *pattern = [NSString stringWithFormat:@".*(\\b%@\\b).*", _map.mapID]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:format, pattern]; 

я предполагая, что формат предикат было таким же, как форматирование строки, которая не является. Я был просвещен этим другим ответом: https://stackoverflow.com/a/12672462/189292

+0

Привет, спасибо за ваш ответ - очень полезно. Не могли бы вы объяснить смысл '(maps == '')'? Объекты с какими значениями будут получены в соответствии с этим? –

+1

Просто проверяет элементы, которые имеют пустое строковое значение. – gdavis

Смежные вопросы