Как я могу отсортировать icloud NSMetadataQuery результат UIDocument по дате модификации?
У меня есть приложение для iOS, которое использует простую модель UIDocument с одним полем контента для хранения iCloud. Я получаю список документов для заполнения UITableView, используя NSMetadataQuery. Я хочу, чтобы новые документы отображались вверху таблицы, но сортировка по умолчанию выглядит старой -> новая.
Я знаю, если бы в документе было пользовательское поле даты, я мог бы отсортировать запрос с помощью NSSortDescriptor для этого поля, но у меня вопрос: можно ли отсортировать по внутренней дате изменения файла, созданного через хранилище UIDocument iCloud? Или есть другой предпочтительный способ сделать это?
2 ответа
Похоже, что правильным способом было бы установить дескриптор сортировки вашего запроса при его создании. Что-то вроде этого:
NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
[query setSearchScopes:[NSArray arrayWithObject:
NSMetadataQueryUbiquitousDocumentsScope]];
NSPredicate *pred = [NSPredicate predicateWithFormat: @"%K ENDSWITH '.bin'",
NSMetadataItemFSNameKey];
[query setPredicate:pred];
NSSortDescriptor *sortDescriptor =
[[[NSSortDescriptor alloc] initWithKey:NSMetadataItemFSContentChangeDateKey
ascending:FALSE] autorelease]; //means recent first
NSArray *sortDescriptors = [NSArray arrayWithObjects:
sortDescriptor,
nil];
[query setSortDescriptors:sortDescriptors];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(queryDidFinishGathering:)
name:NSMetadataQueryDidFinishGatheringNotification
object:query];
[query startQuery];
Суть: Как насчет вызова -[NSURL getResourceValue:forKey:error:]
и проходя в NSURLContentModificationDateKey
затем сортировка по возвращаемым значениям NSDate.
Детали: Вы можете передать компаратор -[NSMutableArray sortUsingComparator:]
который выбирает требуемое NSDate для каждого объекта на лету, или извлекает их все в новый массив с составным NSDate, id
объект и отсортировать массив этого объекта, а затем извлечь id
ссылки после завершения сортировки (идиома python decorate-sort-undecorate).