我正在设置我的谓词字符串,如下所示:
[NSString stringWithFormat:@"(name like '%@')",name]
但是如果 name 包含'
字符,例如如果 name 是"family's"
它会崩溃。
我怎样才能解决这个问题?
我正在设置我的谓词字符串,如下所示:
[NSString stringWithFormat:@"(name like '%@')",name]
但是如果 name 包含'
字符,例如如果 name 是"family's"
它会崩溃。
我怎样才能解决这个问题?
您不需要 ' in NSPredicate
。它们是自动插入的。
你试一试
[NSPredicate predicateWithFormat:@"(name like %@)",name];
崩溃的原因是谓词值被中断。如果您创建一个带有格式的字符串,就像在您的示例中一样,您最终会得到(name like 'family's'),这显然是行不通的。
predicateWithFormat:
另一方面,如果您使用它,则可以让它自己处理。它会转义你的特殊字符。
如果您不想/不能使用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
直接使用的原因。)