2012-12-24 25 views
3

我设置我的谓词的字符串是这样的:NSPredicate错误时字符串包含“在可可触摸

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

但如果名称中包含'字符,例如,如果名称是"family's"它崩溃。

我该如何解决这个问题?

+0

我的回答对你有帮助吗? – NSAddict

+0

哎呀,对不起,我忘了接受它,非常感谢你 - 这是一个很大的帮助! – Devfly

+0

没问题,谢谢:) – NSAddict

回答

6

您不需要'in NSPredicate。他们正在自动插入。

试试看

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

此坠毁的原因是因为该预测值被中断。 如果你创建一个带格式的字符串,就像你的例子一样,你最终会以(名字像'family's'),这显然无法工作。

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

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。)

相关问题