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

iOS:将文件名从documents目录获取到NSMutableArray中,ios,path,nsmutablearray,nsfilemanager,nsdocumentdirectory,Ios,Path,Nsmutablearray,Nsfilemanager,Nsdocumentdirectory,这里是我试图做的一个概述。我的应用程序上有一个表单,表单数据保存为文档目录中的.csv文件。我想通过documents目录进行解析,并获得.csv文件的文件名。然后,我希望在UITableView中显示这些文件名,以便用户可以选择要附加到电子邮件的文件。我在将文件名放入NSMutableArray时遇到一些问题。下面是我的代码: NSString *extension = @"csv"; NSArray *paths = NSSearchPathForDirectoriesInDomains(

这里是我试图做的一个概述。我的应用程序上有一个表单,表单数据保存为文档目录中的.csv文件。我想通过documents目录进行解析,并获得.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循环中的代码不起作用,我如何修复它?另外,我希望不要混淆,我有一个singleton类,在本例中,我将文件名存储在其中,以便可以跨多个视图编辑和访问它们

谢谢, 亚历克斯

你写的

在第二个NSlog中,它应该只打印.csv文件名, 相反,它返回null

这意味着未初始化
\u mySingleton.filePathsArray
。在初始化的情况下,NSLog将打印一个空数组,而不是null

您必须做的事情-在使用之前在某处添加_mySingleton.filePathsArray初始化:

_mySingleton.filePathsArray = [NSMutableArray new];

尝试使用内置的筛选函数

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仍然返回null。我猜您的
\u mySingleton
也是空的。请检查一下。Objective C runtime忽略nil对象的方法调用。出于某种原因,_mySingleton为nil。嗯,我让它工作了。我在头文件中错误地声明了它。如果没有最后一段类似的代码,这是有效的。不过我想我能做到。谢谢你的帮助。