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



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

谢谢,亚历克斯

尝试使用内置的过滤器函数

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

你写了

在第二个NSlog中,它应该只打印。csv文件名,而是返回null

表示_mySingleton.filePathsArray未初始化。在初始化的情况下,NSLog将打印一个空数组,而不是null

你要做的-添加_mySingleton。filePathsArray在使用前的初始化:

_mySingleton.filePathsArray = [NSMutableArray new];

最新更新