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]);
关于您的更新:predicateWithFormat
与 stringWithFormat
不同,因为它做了一些有助于构建谓词的额外工作。例如
[NSPredicate predicateWithFormat@"localFilePath == %@", @"/"]
等同于
[NSPredicate predicateWithFormat@"localFilePath == \"/\""]
可以看到引号是自动加上的。 predicateWithFormat
也接受一些特殊的替换,例如 %K
(对于动态属性)。
Apple 提供了关于使用谓词的很好的tutorial,您可能想要查看。
我必须从核心数据中搜索其中包含方括号的路径。 但是当我尝试创建如下搜索查询时,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]);
关于您的更新:predicateWithFormat
与 stringWithFormat
不同,因为它做了一些有助于构建谓词的额外工作。例如
[NSPredicate predicateWithFormat@"localFilePath == %@", @"/"]
等同于
[NSPredicate predicateWithFormat@"localFilePath == \"/\""]
可以看到引号是自动加上的。 predicateWithFormat
也接受一些特殊的替换,例如 %K
(对于动态属性)。
Apple 提供了关于使用谓词的很好的tutorial,您可能想要查看。