【问题标题】:Setting up a CoreData regular expression predicate for a comma-separated list为逗号分隔的列表设置 CoreData 正则表达式谓词
【发布时间】:2013-06-15 08:12:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c regex core-data nspredicate


    【解决方案1】:

    用这段代码解决了这个问题:

    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

    【讨论】:

    • 您好,感谢您的回答 - 非常有帮助。你能解释一下(maps == '')的含义吗?将根据此获取具有什么值的对象?
    • 它只是检查具有空字符串值的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多