我有一个存储在Entity(核心数据)中的String我想使用NSFetchedResultsController来获取数据。
字符串格式:abc,ba,x,s,d。这是一个以字符串形式保存的ID数组。
我想只获得至少包含该字符串中ID的实体。
问题是如果我在谓词中使用CONTAIN并搜索“a”,我将得到错误的结果。
如果可以在谓词中添加类似“componentsseparatedbystring”的内容,那么我可以给我打电话,这样我就可以在结果中迭代并使用“in”,或者如果还有其他解决方案,谢谢。答案 0 :(得分:1)
您可以使用" MATCHES"谓词中的运算符,它执行一个 正则表达式匹配:
NSString *searchID = @"a";
NSString *pattern = [NSString stringWithFormat:@"(^|.*,)%@(,.*|$)",
[NSRegularExpression escapedPatternForString:searchID]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ID MATCHES %@", pattern];
模式(^|.*,)TERM(,.*|$)
搜索前面的TERM
通过字符串的开头或逗号,然后是
字符串的结尾或另一个逗号。
答案 1 :(得分:0)
首先将您的ID数组转换为NSArray:
NSArray *arrayOfIds = [stringOfIds componentsSeparatedByString:@","];
然后在你的提取中使用IN谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ID IN %@", arrayOfIds];
这假设您的数据库列名为“ID”,并且以逗号分隔的ID字符串是stringOfIds。
答案 2 :(得分:0)
最后我将使用一个肮脏的解决方案:我们有4种可能性:
所以谓词可能是:
[NSPredicate predicateWithFormat:@"(ID LIKE %@ OR
ID CONTAINS %@ OR
ID CONTAINS %@ OR
ID ENDSWITH %@)",
searchedID,
[NSString stringWithFormat:@"%@,", searchedID],
[NSString stringWithFormat:@",%@", searchedID],
[NSString stringWithFormat:@",%@,", searchedID]]
但这是一个肮脏的解决方案,我真的想要更清洁。