我正在尝试过滤格式为 [number]_[number].png 的文件路径数组,并仅获取以特定数字开头的文件路径,例如 1。
这是我尝试过的:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"self MATCHES '%@/1_[0-9]+.png'",
[[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Images"]];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png"
inDirectory:@"Images"]
filteredArrayUsingPredicate:predicate];
我得到一个空数组。我尝试使用 LIKE 而不是 MATCHES。我尝试使用 [cd] 标志,但它应该没关系。不过我总是得到一个空数组。它与正则表达式有关吗?
编辑:
似乎问题出在 predicateWithFormat 上。
我认为它得到一个格式字符串,后跟要替换为格式字符串的参数。它不是那样工作的。它忽略参数,并且在格式字符串中没有任何内容被替换。
所以解决方法如下:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
[NSString stringWithFormat:
@"self MATCHES '%@/1_[0-9]+.png'",
[[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Images"]]];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png"
inDirectory:@"Images"]
filteredArrayUsingPredicate:predicate];