使用撇号时无法解析格式字符串nspredicate错误

Joh*_*ith 1 iphone objective-c nspredicate

我在搜索框中输入关键字时出现此错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法解析格式字符串'(标题CONTAINS [c]'hj'"

我输入任何字符串(在这种情况下为'hj')后跟撇号(或包含撇号).没有撇号 - 没有错误.

这就是我做的:

(void)filter:(NSString*)keyword{
    NSString* predicateString = [NSString stringWithFormat:@"(title CONTAINS[c] '%@')", keyword];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
    self.filteredArray = [self.initialArray filteredArrayUsingPredicate:predicate];
} 
Run Code Online (Sandbox Code Playgroud)

正如我所说,如果关键字中不包含撇号字符,则代码可以正常工作.

Ale*_*kov 11

萨瓦,试试这个:

(void)filter:(NSString*)keyword{
    NSString *keywordWithBackslashedApostrophes = [keyword stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
    NSString* predicateString = [NSString stringWithFormat:@"title CONTAINS[c] '%@'", keywordWithBackslashedApostrophes];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
    self.filteredArray = [self.initialArray filteredArrayUsingPredicate:predicate];
} 
Run Code Online (Sandbox Code Playgroud)

与代码的主要区别在于关键字中的撇号由反斜杠 - 撇号替换.