hzx*_*zxu 6 arrays iphone filtering nspredicate ios
我在应用包中有一个图像列表,需要在应用中显示相应的图像,图像的格式为:
###_photo_#.jpg
###: toy id, from 1000 to 2000
#: photo id, from 1
Run Code Online (Sandbox Code Playgroud)
所以例如
1000_photo_1.jpg
1000_photo_2.jpg
Run Code Online (Sandbox Code Playgroud)
我曾经获取捆绑包中的文件列表并使用谓词来过滤掉其他文件:
@"self ENDSWITH '.jpg' AND self BEGINSWITH '%d_photo_'", toyId
Run Code Online (Sandbox Code Playgroud)
但现在有视网膜图像以@ 2x.jpg结尾,所以这个方法需要修复,我正在考虑添加:
NOT ENDSWITH '@2x.jpg'
Run Code Online (Sandbox Code Playgroud)
但这是对的吗?我应该说:
NOT (ENDSWITH '@2x.jpg')
Run Code Online (Sandbox Code Playgroud)
要么:
(NOT ENDSWITH '@2x.jpg')
Run Code Online (Sandbox Code Playgroud)
代替?
您可以使用这样的谓词字符串:
@"(self ENDSWITH '.jpg') AND NOT (self ENDSWITH '@2x.jpg') AND (self BEGINSWITH '%d_photo_')"
Run Code Online (Sandbox Code Playgroud)
您可以将谓词封装在另一个谓词中:
NSPredicate *positivePredicate = [NSPredicate ...];
NSPredicate *negativePredicate = [NSCompoundPredicate notPredicateWithSubpredicate: positivePredicate];
Run Code Online (Sandbox Code Playgroud)
这允许您保留现有的清晰格式字符串.请注意NSCompoundPredicate,您还可以构建AND和OR谓词.从这三个(AND,OR,NOT),您甚至可以得到像XNOR和NAND谓词这样的东西(尽管如何这样做是留给读者的练习......)
我认为 iOS 4.0+ 中更好的选择是使用NSPredicate predicateWithBlock:来定义您的条件。这样你就可以使用标准的 NSString 函数来hasSuffix:检查你的结尾是否为负数。
在这里查看一个很好的教程:http://www.wannabegeek.com/?p =149
这是使用它的基本方法。
NSInteger toyId = 10;
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [evaluatedObject hasSuffix:@".jpg"] &&
![evaluatedObject hasSuffix:@"@2x.jpg"] &&
[evaluatedObject hasPrefix:[NSString stringWithFormat:@"%@_photo_", [NSNumber numberWithInt:toyId]]];
}];
Run Code Online (Sandbox Code Playgroud)
然后您可以获取文件数组
[arrayOfFiles filterArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3360 次 |
| 最近记录: |