создание массивов файлов, отсортированных по дате модификации в objc на iphone - PullRequest
0 голосов
/ 07 августа 2011

Огромный фанат этого сайта, но это мой первый пост!

У меня есть массив имен файлов в каталоге, и я хочу отсортировать их. Существуют сотни сообщений о сортировке, но я не смог найти ничего, что можно было бы использовать о сортировке по дате изменения.

Вот мой код. Он успешно создает массив файлов, которые подаются в мою таблицу. Мне просто нужно отсортировать его по дате изменения, а не по алфавиту:

//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

Я прочитал все, что мог найти об этом в Интернете, но я просто не понимаю, как будет работать эта сортировка. Я понимаю, что существует около четырех различных способов сортировки, но какой из них я выбрал для сортировки массива по ключу даты в словаре и как бы я реализовал его здесь?

Спасибо!

EDIT:

Нашел ответ примерно через 5 секунд после публикации. Мне нужен был код:

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[sortedFiles sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];

Так глупо легко, я потратил на это целый день!

Надеюсь, это кому-нибудь поможет!

Ответы [ 2 ]

6 голосов
/ 26 октября 2012

Просто чтобы предоставить более полный код любому, кто его ищет:

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

1 голос
/ 16 октября 2011

Просто чтобы уточнить, ответ был:

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[sortedFiles sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...