创建一个文件数组,按照iphone上的objc中的修改日期排序

时间:2011-08-07 06:55:15

标签: iphone objective-c xcode

这个网站的巨大粉丝,但这是我的第一篇文章!

我在目录中有一个文件名数组,我想对它们进行排序。有数百篇关于排序的帖子,但是我找不到任何关于按修改日期排序的内容。

到目前为止,这是我的代码。它成功创建了一个文件数组,这些文件可以输入到我的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]];

非常简单,我花了一整天时间来做这件事!

希望这有助于某人!

2 个答案:

答案 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]];