NSPredicate 因包含方括号的路径而崩溃

NSPredicate crash with path which contains square brackets

我必须从核心数据中搜索其中包含方括号的路径。 但是当我尝试创建如下搜索查询时,xcode 崩溃了。

path == /my/local/[path]

我试过对方括号进行转义,从一个括号转义为十六个括号,但没有任何效果。

该路径来自另一个应用程序,因此无法更改。 我应该怎么办? 预先感谢您的帮助!

编辑:
我制作NSPredicate的代码是这样的
NSPredicate *preTest = [NSPredicate predicateWithFormat:@"localFilePath == /[test]/"];

更新:
我发现了一些奇怪的东西。
NSPredicate *testPre = [NSPredicate predicateWithFormat:@"localFilePath == %@", uploadFile.remotePath];
NSPredicate *what = [NSPredicate predicateWithFormat:@"localFilePath == /"];
其中 uploadFile.remotePath 等于 @"/".
第一个没问题,第二个就崩溃了!

我认为这似乎与我的问题有关。有什么想法吗?
感谢您花时间解决我的问题! :)

如果你需要匹配[]你可以使用matches运算符,它使用regular expressions。示例:

NSArray *array = @[@"[apple]", @"[boy]", @"[dog]", @"cat"];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self matches %@", @"\[dog\]"];
NSLog(@"%@", [array filteredArrayUsingPredicate:pred]);

关于您的更新:predicateWithFormatstringWithFormat 不同,因为它做了一些有助于构建谓词的额外工作。例如

[NSPredicate predicateWithFormat@"localFilePath == %@", @"/"]

等同于

[NSPredicate predicateWithFormat@"localFilePath == \"/\""]

可以看到引号是自动加上的。 predicateWithFormat 也接受一些特殊的替换,例如 %K (对于动态属性)。

Apple 提供了关于使用谓词的很好的tutorial,您可能想要查看。