2015-08-14 109 views
0

下面是我想要做的一个概述。我的应用程序上有一个表单,表单数据作为.csv文件保存在文档目录中。我想解析文档目录并获取.csv文件的文件名。然后,我想在UITableView中显示这些文件名,以便用户可以选择要附加到电子邮件的文件。我在获取文件名到NSMutableArray时遇到了一些麻烦。以下是我的代码:iOS:从文档目录获取文件名到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循环中的代码不起作用,我该如何解决这个问题?另外我希望它不会让人困惑,我有一个单例类,在这种情况下,我将文件名存储在其中,以便可以在多个视图中编辑和访问它们。

谢谢, 亚历克斯

回答

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 
+0

这工作减去代码的最后一个。我想我可以做这个工作。感谢您的帮助。 –

0

你写

在第二个的NSLog它应该只打印该.csv文件名,而不是 它返回

这意味着_mySingleton.filePathsArray未被初始化。如果它将被初始化NSLog将打印一个空数组,而不是null

,你所要做的 - 添加_mySingleton.filePathsArray初始化它被用来在什么地方:

_mySingleton.filePathsArray = [NSMutableArray new]; 
+0

当我试图打印数组的内容的NSLog的仍然返回null。 –

+0

我想你的'_mySingleton'也是零。请检查一下。 Objective C运行时忽略了nil对象的方法调用。 – Avt

+0

由于某些原因_mySingleton是零。嗯 –