Я бью голову против стены, пытаясь получить функцию регулярного выражения для работы с излучением 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 о совпадении предикатов со всей строкой, но я чувствую, что с этим шаблоном следует обращаться с этим шаблоном, используя .*
в начале и конце шаблона.
Результат этого кода всегда возвращает нулевые результаты. Если предикат не используется, все объекты возвращаются, как ожидалось. Кто-нибудь может понять, в чем проблема? Благодаря!
Привет, спасибо за ваш ответ - очень полезно. Не могли бы вы объяснить смысл '(maps == '')'? Объекты с какими значениями будут получены в соответствии с этим? –
Просто проверяет элементы, которые имеют пустое строковое значение. – gdavis