iOS:从文档目录中获取文件名到NSMutableArray

时间:2015-08-14 17:59:03

标签: ios path nsmutablearray nsfilemanager nsdocumentdirectory

以下是我正在尝试做的事情的概述。我的应用程序上有一个表单,表单数据在文档目录中保存为.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循环中的代码不起作用,我该如何解决这个问题呢?另外我希望它不会混淆,我有一个单例类,在这种情况下我将文件名存储在其中,以便可以在多个视图中编辑和访问它们。

谢谢, 亚历

1 个答案:

答案 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