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 过滤

在 NSPredicate 中比较整数和字符串

objective-c 空 NSArray 错误

Objective-C中的领域日期范围查询

NSPredicate 过滤关系

NSPredicate 在核心数据中的多对多关系