为逗号分隔列表设置CoreData正则表达式谓词

时间:2013-06-18 22:50:03

标签: objective-c regex core-data nspredicate

我正在试图获得一个正则表达式函数来处理CoreData fetch。我在maps子类上有一个名为NSManagedObject的属性,我正在尝试过滤它。此maps属性是一个字符串,其中包含id值列表,如下所示:

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];

我使用此Rubular示例构建了RegEx:http://rubular.com/r/zELaz19x0T

mapID值是一个整数作为字符串。

我已经阅读了有关谓词匹配整个字符串的其他问题,但我觉得应该在模式的开头和结尾使用.*处理这种模式。

此代码的结果始终返回零结果。如果未使用谓词,则按预期返回所有对象。任何人都可以看到这里的问题是什么?谢谢!

1 个答案:

答案 0 :(得分: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