当字符串包含'在Cocoa Touch中时,NSPredicate错误

时间:2012-12-24 17:21:42

标签: objective-c nspredicate

我正在设置我的谓词的字符串:

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

但如果名称包含'个字符,例如,如果名称为"family's"则会崩溃。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

您不需要'NSPredicate。它们会自动插入。

试试

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

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

另一方面,如果使用predicateWithFormat:,可以让它自己处理。它会逃脱你的特殊角色。

答案 1 :(得分: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的原因。)