Objective-C:NSPredicate LIKE 不喜欢空格。是不是有用于替换空格的转义序列?
Posted
技术标签:
【中文标题】Objective-C:NSPredicate LIKE 不喜欢空格。是不是有用于替换空格的转义序列?【英文标题】:Objective-C: NSPredicate LIKE doesn't like spaces. Is there an escape sequence to replace blanks with?Objective-C:NSPredicate LIKE 不喜欢空格。是否有用于替换空格的转义序列? 【发布时间】:2010-02-04 18:09:41 【问题描述】:我有一个如下所示的 NSPredicate:
NSPredicate *likePredicate3= [NSPredicate predicateWithFormat:@"synonyms LIKE[cd] %@",[NSString stringWithFormat:@"%@", searchText]];
我将它应用于具有“同义词”属性的类的对象的 NSArray。
当 searchText 是一个完整的单词(例如“Thanks”)时,它可以正常工作。但是,如果我尝试使用带有空格的字符串,例如“谢谢”,则会失败,并且谓词搜索在数组中找不到匹配项。
有没有办法让 NSPredicate 处理包含空格的单词?
谢谢。
【问题讨论】:
您是否有理由从searchText
创建一个新的自动释放字符串,而不仅仅是使用 searchText
本身?
我也想知道这一点,但在我的测试中没有任何区别。也许他只是通过更精细的格式化操作将其简化为搜索词......
@dreamlax,这是我使用的实际代码的残余,因为我在搜索代码之前格式化了 searchText。它与您所说的使用 searchText 本身相同。
【参考方案1】:
原则上,你正在做的应该是有效的。我运行了这个例子:
NSString *search = @"a b";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF LIKE[cd] %@",
[NSString stringWithFormat:@"%@", search]];
NSArray *array = [[NSArray arrayWithObjects:@"a b", @"ä B", @"ccc", nil]
filteredArrayUsingPredicate: predicate];
NSLog(@"result: %@", array);
输出是:
Running…
2010-02-04 20:05:41.770 predicate2[74163:a0f] result: (
"a b",
"\U00e4 b"
)
也许你的 searchString 不是你想的那样......
【讨论】:
@VoidPointer,是的,这也是我一段时间后的猜测,我一直在试图弄清楚那可能是什么。我正在搜索从 plist 加载的数组,它适用于某些情况,但不适用于其他情况。 在文档中,一些示例在 predicateWithFormat: 参数中的 %@ 占位符周围使用引号。在我的测试中,这导致占位符根本没有被评估。也许你可以试试:[NSPredicate predicateWithFormat:@"SELF LIKE[cd] '%@'", ...]以上是关于Objective-C:NSPredicate LIKE 不喜欢空格。是不是有用于替换空格的转义序列?的主要内容,如果未能解决你的问题,请参考以下文章
Objective-c NSPredicate - 按不同 NSManagedObjectContext 中的 ObjectId 过滤