2

我有以下代码:

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

在我看来这是一个简单的问题,但在互联网上找不到解决方案,谁知道?

4

1 回答 1

5

LIKE在谓词句柄*通配符中?,其中匹配 1 个字符并匹配 0 个或多个字符。这些通配符可以转义为或逐字匹配星号或问号。?*\*\?

因此,反斜杠本身必须像\\在“LIKE”查询中一样被转义以匹配单个反斜杠。搜索模式末尾的单个反斜杠会导致错误(这就是您的情况)

如果您不需要通配符处理,您可以使用==,BEGINSWITHCONTAINS代替。所有这些都可以与[c].

于 2013-10-05T13:28:51.020 回答