以下是我正在尝试做的事情的概述。我的应用程序上有一个表单,表单数据在文档目录中保存为.csv文件。我想解析文档目录并获取.csv文件的文件的文件名。然后,我想在UITableView中显示这些文件名,以便用户可以选择要附加到电子邮件的文件。我在将文件名转换为NSMutableArray时遇到了一些麻烦。以下是我的代码:
NSString *extension = @"csv";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError *error = nil;
NSArray *documentArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error];
NSLog(@"files array %@", documentArray);
NSString *filename;
for (filename in documentArray) {
if ([[filename pathExtension] isEqualToString:extension])
{
[_mySingleton.filePathsArray addObject:filename];
}
}
NSLog(@"files array %@", _mySingleton.filePathsArray);
第一个NSlog返回文件夹中所有文件名的内容。在第二个NSlog中,它应该只打印.csv文件名,而是返回null。显然for循环中的代码不起作用,我该如何解决这个问题呢?另外我希望它不会混淆,我有一个单例类,在这种情况下我将文件名存储在其中,以便可以在多个视图中编辑和访问它们。
谢谢, 亚历
答案 0 :(得分:2)
尝试使用内置的过滤功能
NSArray *files = @[@"11.csv", @"22.txt", @"333.csv", @"444.doc"];
NSArray *cvsFiles = [files filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSString *evaluatedObject, NSDictionary *bindings) {
return [evaluatedObject hasSuffix:@".csv"];
}]];
NSLog(@"%@", cvsFiles);
在您的代码中,filePathsArray将只包含文件名。您应该将目录路径附加到。
[_mySingleton.filePathsArray addObject:[documentsDirectory stringByAppendingPathComponent:filename];
完整版
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSArray *documentArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];
NSArray *cvsFiles = [documentArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSString *evaluatedObject, NSDictionary *bindings) {
return [evaluatedObject hasSuffix:@".csv"];
}]];
NSMutableArray *filePaths = [@[] mutableCopy];
for (NSString *fileName in cvsFiles) {
[filePaths addObject:[documentsDirectory stringByAppendingPathComponent:fileName]];
}
_mySingleton.filePathsArray = filePaths