繁体   English   中英

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

[英]iOS: get filenames from documents directory into 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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM