我有以下代码:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like[c] %@", projectName];
[fetchRequest setPredicate:predicate];
[moc executeFetchRequest:request error:error]; // moc & error are defined elsewhere
当我使用projectName为“asdf”运行此代码时,一切都很好。但是,当该值设置为“asdf”时(注意结尾处的反斜杠),会出现以下异常:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The backslash is a wildcard char, and cannot appear unescaped at the end of a string.'
po request 为我提供了以下信息:
po request
<NSFetchRequest: 0x101348ee0> (entity: Project; predicate: (name LIKE[c] "asdf\\"); sortDescriptors: ((null)); type: NSManagedObjectResultType; )
对我来说这是一个简单的问题,但无法在互联网上找到解决方案,谁知道呢?
答案 0 :(得分:5)
LIKE
处理*
和?
作为通配符,
其中?
匹配1个字符,*
匹配0个或更多字符。这些通配符
字符可以转义 \*
或\?
,以便逐字匹配星号或问号。
因此,反斜杠本身必须在“LIKE”查询中以\\
转义
匹配单个反斜杠。搜索模式末尾的单反斜杠
导致错误(这就是你的情况)。
如果您不需要通配符处理,则可以使用==
,BEGINSWITH
或CONTAINS
代替。
所有这些都可以与[c]
结合使用。