![](/img/trans.png)
[英]Get File List from sub folder of Documents Directory swift ios
[英]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.