Objective c 筛选NSFileManager内容以获取文件列表';模式';使用NSPredicate

Objective c 筛选NSFileManager内容以获取文件列表';模式';使用NSPredicate,objective-c,cocoa,nspredicate,nsfilemanager,Objective C,Cocoa,Nspredicate,Nsfilemanager,我有一个字符串数组用作“过滤器”: @[@"*.png", @".DS_Store", @"Foobar", @".jpg"] 如何使用上述模式使用NSPredicate过滤掉文件夹中的所有内容 到目前为止,我得到的是: NSArray *contents = [fileManager contentsOfDirectoryAtPath:fullPath error:NULL]; NSArray *filter = @[@"*.png", @".DS_Store", @"Foobar", @"

我有一个字符串数组用作“过滤器”:

@[@"*.png", @".DS_Store", @"Foobar", @".jpg"]
如何使用上述模式使用NSPredicate过滤掉文件夹中的所有内容

到目前为止,我得到的是:

NSArray *contents = [fileManager contentsOfDirectoryAtPath:fullPath error:NULL];
NSArray *filter = @[@"*.png", @".DS_Store", @"Foobar", @".jpg"];
NSArray *contents = [contents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"((pathExtension IN[cd] %@) OR (lastPathComponent IN[cd] %@)) ", filter, filter]];

但这并没有给我想要的结果。例如,不过滤
png
文件。此外,我无法使其不区分大小写,因此不会过滤掉
foobar

您可以过滤那些您想要列出的内容。剩余的将自动过滤

-(void)filter
{
    localSongs=[[NSMutableArray alloc]init];
    NSArray * paths = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory,  NSUserDomainMask, YES);
    documentsDirectory = [paths objectAtIndex:0];
    NSDirectoryEnumerator *de = [[NSFileManager defaultManager]   enumeratorAtPath:documentsDirectory] ;
    NSString *file;

    while ((file = [de nextObject]))
    if (([[file pathExtension] isEqualToString:@"MP3"]) || ([[file  pathExtension]isEqualToString:@"mp4"]) ||  ([[file pathExtension]isEqualToString:@"mp3"]) ||  ([[file pathExtension]isEqualToString:@"mov"]) || ([[file  pathExtension]isEqualToString:@"avi"]) )

    [localSongs addObject:file.lastPathComponent];


    NSLog(@"local files%@",localSongs);
}

您可以筛选要列出的内容。剩余的将自动过滤

-(void)filter
{
    localSongs=[[NSMutableArray alloc]init];
    NSArray * paths = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory,  NSUserDomainMask, YES);
    documentsDirectory = [paths objectAtIndex:0];
    NSDirectoryEnumerator *de = [[NSFileManager defaultManager]   enumeratorAtPath:documentsDirectory] ;
    NSString *file;

    while ((file = [de nextObject]))
    if (([[file pathExtension] isEqualToString:@"MP3"]) || ([[file  pathExtension]isEqualToString:@"mp4"]) ||  ([[file pathExtension]isEqualToString:@"mp3"]) ||  ([[file pathExtension]isEqualToString:@"mov"]) || ([[file  pathExtension]isEqualToString:@"avi"]) )

    [localSongs addObject:file.lastPathComponent];


    NSLog(@"local files%@",localSongs);
}
看看

看看