我有NSMutableArray和.mp3格式的音乐文件对象。从文档目录中提取的所有项目。我的问题是我得到.sqlite文件和.mp3文件。 我只想要来自NSMutableArray的.mp3文件。我尝试使用NSPredicate,但它给出了错误的不兼容指针类型NSMutableArray / NSArray。(NSMutableArray and NSPredicate filtering)
我不想要像(projectname.sqlite,projectname.sqlite-shm,projectname.sqlite-val等)这样的文件
我的代码是,
downloadedFilesArray = [[NSMutableArray alloc] init];
fileManger = [NSFileManager defaultManager];
NSError *error;
downloadedFilesArray = [[fileManger contentsOfDirectoryAtPath:fileDest error:&error] mutableCopy];
if([downloadedFilesArray containsObject:@".DS_Store"])
[downloadedFilesArray removeObject:@".DS_Store"];
如何过滤.mp3,.m3u,.aac等文件
由于
答案 0 :(得分:1)
使用NSString
' pathExtension
获取文件扩展名(如果有),或使用NSPredicate
。另外,请记住检索目录内容时是否有NSError
。
NSMutableArray *mp3DownloadedFilesArray = [[NSMutableArray alloc] init];
NSString *targetFileExtension = @"mp3";
NSError *error;
NSArray *allDownloadedFilesArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:fileDest error:&error];
if (allDownloadedFilesArray && allDownloadedFilesArray.count > 0 && !error) {
for (NSString* fileName in allDownloadedFilesArray) {
if ([fileName.pathExtension compare:targetFileExtension options:NSCaseInsensitiveSearch] == NSOrderedSame) {
[mp3DownloadedFilesArray addObject:fileName];
}
}
} else {
// Process the error
}
答案 1 :(得分:1)
只需使用filterUsingPredicate:
方法:
[downloadedFilesArray filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELF ENDSWITH %@", @".mp3"]];
或者对于不区分大小写的版本:
[downloadedFilesArray filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELF ENDSWITH [cd] %@", @".mp3"]];
编辑:如果您想要使用更多文件扩展名进行过滤,则可以创建多个NSPredicates
(每个扩展名一个)并使用[NSCompoundPredicate orPredicateWithSubpredicates]
进行组合。抱歉,但我没有提供现成的解决方案,您必须自己实施。
答案 2 :(得分:0)
NSArray *downloadedFilesArray = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
// filter the array for only sqlite files
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.mp3' || "];
NSArray *sqliteFiles = [allFiles filteredArrayUsingPredicate:fltr];
答案 3 :(得分:-1)
无论如何,NSPredicate应该可以工作,但你可以自己编写过滤逻辑:
NSMutableArray* downloadedFilesArray = [[NSMutableArray alloc] init];
NSMutableArray* removeFilesArray = [[NSMutableArray alloc] init];
for (NSString* fileName in downloadedFilesArray){
if ([fileName.lowercaseString rangeOfString:@".mp3"].location != fileName.length - 4) {
[removeFilesArray addObject:fileName];
}
}
[downloadedFilesArray removeObjectsInArray:removeFilesArray];