这个网站的巨大粉丝,但这是我的第一篇文章!
我在目录中有一个文件名数组,我想对它们进行排序。有数百篇关于排序的帖子,但是我找不到任何关于按修改日期排序的内容。
到目前为止,这是我的代码。它成功创建了一个文件数组,这些文件可以输入到我的tableview中。我只需要按修改日期对其进行排序,而不是按字母顺序排序:
//Create dictionary with attributes I care about and a fileList array
NSMutableArray *fileList = [[NSMutableArray alloc] initWithCapacity:10];
NSDictionary *fileData = [NSDictionary dictionaryWithObjectsAndKeys:file, @"file", dateString, @"date", nil];
[fileList addObject:fileData];
//I don't know how to sort this array by the "date" key!
NSArray *files = [fm contentsOfDirectoryAtPath:folderPath error:NULL];
//iterate through files array
for (NSString *file in files) {
NSString *path = [folderPath stringByAppendingPathComponent:file];
//code to create custom object with contents of file as properties
//feed object to fileList, which displays it in the tableview
我已经阅读了我在网上可以找到的所有内容,但我只是不明白这种排序是如何工作的。我理解有大约四种不同的排序方式,但是我选择哪一种方法按字典中的日期键对数组进行排序,我将如何在此处实现它?
谢谢!
编辑:
发布此消息后约5秒钟找到答案。我需要的代码是:
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[sortedFiles sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
非常简单,我花了一整天时间来做这件事!
希望这有助于某人!
答案 0 :(得分:6)
为所有寻找它的人提供更完整的代码:
NSFileManager * fm = [NSFileManager defaultManager];
NSArray * files = [fm contentsOfDirectoryAtURL:[NSURL URLWithString:@"/path/to/dir/"] includingPropertiesForKeys:[NSArray arrayWithObject:NSURLCreationDateKey] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil];
if ((nil != files) && ([files count] > 0)){
NSArray * sortedFileList = [files sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDate * mDate1 = nil;
NSDate * mDate2 = nil;
if ([(NSURL*)obj1 getResourceValue:&mDate1 forKey:NSURLCreationDateKey error:nil] &&
[(NSURL*)obj2 getResourceValue:&mDate2 forKey:NSURLCreationDateKey error:nil]) {
if ([mDate1 timeIntervalSince1970] < [mDate2 timeIntervalSince1970]) {
return (NSComparisonResult)NSOrderedDescending;
}else{
return (NSComparisonResult)NSOrderedAscending;
}
}
return (NSComparisonResult)NSOrderedSame; // there was an error in getting the value
}];
}
可以使用其他密钥代替NSURLCreationDateKey
- 完整列表位于NSURL Class Reference
答案 1 :(得分:1)
只是澄清一下,答案是:
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[sortedFiles sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];