0

我正在努力让正则表达式函数与CoreData fetch一起工作。我有一个在我试图过滤maps的子类上命名的属性。NSManagedObjectmaps属性是一个带有 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值是作为字符串的整数。

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

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

4

1 回答 1

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

于 2013-06-18T23:21:36.400 回答