gpt4 book ai didi

ios - 如何只获取 NSUrl 数组的文件名

转载 作者:行者123 更新时间:2023-11-28 17:49:19 25 4
gpt4 key购买 nike

我有一个 NSUrl 数组,但我只需要每个路径的文件名显示在 tableview 文本标签单元格中。

我从文档目录中获取文件并过滤了我需要在表格 View 的单元格中显示的 .csv 文件。

这是我的代码:

        NSError *err;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentDirectoryURL = [fileManager URLForDirectory:NSDocumentDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:false
error:&err];

NSMutableArray *files = [[fileManager contentsOfDirectoryAtURL:documentDirectoryURL
includingPropertiesForKeys:@[NSURLCreationDateKey ]
options:0
error:&err] mutableCopy];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension='.csv'"];
NSArray *csvFiltered = [files filteredArrayUsingPredicate:predicate];

////////////


NSMutableArray*allItems = [NSMutableArray new];

for (NSURL*paramURL in csvFiltered)
{
NSString *basenameOnly = documentDirectoryURL.lastPathComponent.stringByDeletingPathExtension;


[allItems addObject:basenameOnly];
}

NSLog(@"%@", allItems);
self.dirList = [allItems mutableCopy];

self.data.reloadData;
}


BOOL ascending = YES;
[files sortUsingComparator:^(NSURL *lURL, NSURL *rURL) {
NSDate *lDate, *rDate;
[lURL getResourceValue:&lDate forKey:NSURLCreationDateKey error:nil];
[rURL getResourceValue:&rDate forKey:NSURLCreationDateKey error:nil];
return ascending ? [lDate compare:rDate] : [rDate compare:lDate];
}];

最佳答案

首先我有一个déjà vu

其次,不要 只获取 NSUrl 数组的文件名。您将无法按创建日期对文件进行排序。


您不能使用谓词过滤 NSURL 数组,您必须在循环中过滤文件。

要将过滤后的数组用作数据源,首先在.h 文件中创建一个属性

@property NSMutableArray<NSURL *> *files; 

在 .m 文件中创建一个单独的方法来对文件进行排序

- (void)sortFilesByCreationDateAscending:(BOOL)ascending
{
[self.files sortUsingComparator:^(NSURL *lURL, NSURL *rURL) {
NSDate *lDate, *rDate;
[lURL getResourceValue:&lDate forKey:NSURLCreationDateKey error:nil];
[rURL getResourceValue:&rDate forKey:NSURLCreationDateKey error:nil];
return ascending ? [lDate compare:rDate] : [rDate compare:lDate];
}];
}

viewDidLoad 中获取文件,对其进行过滤和排序。然后重新加载 TableView

- (void)viewDidLoad {
[super viewDidLoad]:
self.files = [[NSMutableArray alloc] init];
NSError *error;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentDirectoryURL = [fileManager URLForDirectory:NSDocumentDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:false
error:nil];

NSArray<NSURL *> *fileURLs = [fileManager contentsOfDirectoryAtURL:documentDirectoryURL
includingPropertiesForKeys:@[NSURLCreationDateKey]
options:0
error:&error];
if (error) {
NSLog(@"%@", error);
return;
}
for (NSURL *anURL in fileURLs) {
if ([anURL.pathExtension isEqualToString:@"csv"]) {
[self.files addObject: anURL];
}
}
[self sortFilesByCreationDateAscending:YES];
[self.tableView reloadData];
}

numberOfRowsInSection 中返回 self.files.count

cellForRowAtIndexPath 中获取索引路径的 URL 并显示文件名

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *simpleTableIdentifier = @"SimpleTableItem";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath: indexPath];
NSURL *url = self.files[indexPath.row];
cell.textLabel.text = url.lastPathComponent;
return cell;
}

要在另一个方向上对文件进行排序,请使用适当的 BOOL 值调用 sortFilesByCreationDateAscending 并重新加载 TableView 。

关于ios - 如何只获取 NSUrl 数组的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com