我正在设置我的谓词的字符串:
[NSString stringWithFormat:@"(name like '%@')",name]
但如果名称包含'
个字符,例如,如果名称为"family's"
则会崩溃。
我该如何解决这个问题?
答案 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
的原因。)