如何在iOS中按创建日期对文档目录中的文件进行排序?

时间:2013-06-24 14:20:04

标签: ios objective-c cocoa-touch nsmutablearray nsdate

我有一个NSMutableArray从iOS中的文档目录中检索文件。

我使用以下代码从文档目录中检索文件。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSError * error;
    self.array = [[NSMutableArray alloc] init];

    self.array = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error];

然后我在UITableView中显示文件列表。 但它以字母顺序显示。

我希望将其显示为按文件的创建日期排序。

修改

我在这里写ViewWillAppear

- (void)viewWillAppear:(BOOL)animated
{   
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSError * error;
    self.array = [[NSMutableArray alloc] init];

    self.array = (NSMutableArray *)[[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error];

    [self loadData];  
 }

- (void) loadData
{
    self.sortedFileList = [self.array mutableCopy];
    [self.sortedFileList sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSDate* d1 = [[NSFileManager defaultManager] attributesOfFileSystemForPath:obj1 error:nil][@"fileCreationDate"];
        NSDate* d2 = [[NSFileManager defaultManager] attributesOfFileSystemForPath:obj2 error:nil][@"fileCreationDate"];
        return [d1 compare:d2];
    }];

}

并没有按日期排序。

我该怎么做?

感谢您的任何建议和帮助。

3 个答案:

答案 0 :(得分:3)

您需要我们NSFileManager获取每个文件的属性(attributesOfItemAtPath:error:)。这将返回文件的字典,您可以使用fileCreationDate获取创建日期。然后你可以进行排序。

答案 1 :(得分:3)

您可以做的一件事是将FileNames作为Key存储,CreationDate作为Value存储在某些NSDictionary中,然后您就可以使用..

myArray = [myDict keysSortedByValueUsingComparator: ^NSComparisonResult(id obj1, id obj2){
                  return [[obj2 date] compare:[obj1 date]];
          }];

答案 2 :(得分:2)

一种方法是在可变数组上使用sortUsingComparator:方法,例如(伪代码):

@property (nonatomic,retain) NSMutableArray* sortedFileList;
....

// Make sure to call this method *once* (i.e. from your VC when loading view).
- (void) loadData {
    self.sortedFileList = [self.array mutableCopy];
    [a sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSDate* d1 = [[NSFileManager defaultManager] attributesOfItemAtPath:obj1 error:nil][@"fileCreationDate"];
        NSDate* d2 = [[NSFileManager defaultManager] attributesOfItemAtPath:obj2 error:nil][@"fileCreationDate"];
        return [d1 compare:d2];            
    }];

}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     {
    return self.sortedFileList.count;
}

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell* cell = // dequeue cell or create one



    cell.textLabel.text = [[[NSString stringWithFormat:@"%@",[self.sortedFileList objectAtIndex:indexPath.row]] lastPathComponent] stringByDeletingPathExtension];
}