3

我正在设置我的谓词字符串,如下所示:

[NSString stringWithFormat:@"(name like '%@')",name]

但是如果 name 包含'字符,例如如果 name 是"family's"它会崩溃。

我怎样才能解决这个问题?

4

2 回答 2

6

您不需要 ' in NSPredicate。它们是自动插入的。

你试一试

[NSPredicate predicateWithFormat:@"(name like %@)",name];

崩溃的原因是谓词值被中断。如果您创建一个带有格式的字符串,就像在您的示例中一样,您最终会得到(name like 'family's'),这显然是行不通的。

predicateWithFormat:另一方面,如果您使用它,则可以让它自己处理。它会转义你的特殊字符。

于 2012-12-24T20:11:05.443 回答
0

如果您不想/不能使用predicateWithFormat,那么您可以简单地替换字符串中的任何撇号。

我在我的应用程序中执行此操作,检查我的UISearchBar控件时,查看用户是否正在尝试查找特定的 CoreData 记录:

NSString* searchString = self.searchBar.text;
if (searchString.length != 0)
{
    searchString = [searchString stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
    NSString* filter = [NSString stringWithFormat:@"companyName CONTAINS[cd] '%@'", searchString];

    NSPredicate* predicate1 = [NSPredicate predicateWithFormat:filter]; 

    //  ...etc... 
}

(这是我使用的通用函数的简化版本,它实际上使用可变数量的过滤器字符串搜索 CoreData,这就是我不predicateWithFormat直接使用的原因。)

于 2015-03-31T14:38:18.893 回答