我正在试图获得一个正则表达式函数来处理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
值是一个整数作为字符串。
我已经阅读了有关谓词匹配整个字符串的其他问题,但我觉得应该在模式的开头和结尾使用.*
处理这种模式。
此代码的结果始终返回零结果。如果未使用谓词,则按预期返回所有对象。任何人都可以看到这里的问题是什么?谢谢!
答案 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