OSX: как получить доступ к свойствам в методе NSFileManagercontentsOfDirectoryAtUrl:

Я не могу понять, как получить доступ к свойствам (я имею в виду атрибуты файлов, которые мы запрашиваем как NSArray в includingPropertiesForKeys: части этого метода), которые я упоминаю в методе NSFileManager:

-(NSArray *)contentsOfDirectoryAtURL:<#(NSURL *)#> 
          includingPropertiesForKeys:<#(NSArray *)#> 
                             options:<#(NSDirectoryEnumerationOptions)#> 
                               error:<#(NSError *__autoreleasing *)#>

Я получаю объект NSArray, содержащий массив объектов NSURL для файлов.

Итак, я не могу просто получить эти свойства (я просто не знаю, как это сделать).

Я должен использовать эту конструкцию для получения этих свойств:

NSArray *arrayOfNSURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:myFolderURL
                              includingPropertiesForKeys:@[NSURLContentModificationDateKey, NSURLVolumeIdentifierKey, NSURLLocalizedNameKey,NSURLLocalizedTypeDescriptionKey]
                                                 options:NSDirectoryEnumerationSkipsHiddenFiles
                                                   error:nil];

// I will call all below this 'second part'

id test;
for (id file in arrayOfNSURLs) {
    if ([file isKindOfClass:[NSURL class]]) {
        [file getResourceValue:&test forKey:NSURLContentModificationDateKey error:nil];

        NSLog(@"%@ %@",file ,test);

    }

}

Как видите, я должен использовать метод NSURL getResourceValue:forKey:error:. Но подождите, для чего я упоминаю этот ключ в NSFileManager методе contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error:, в includingPropertiesForKeys: части???

Я пытаюсь указать nil в качестве аргумента для части ...includingPropertiesForKeys:, и нет никакой разницы между добавлением массива ключей и nil, «вторая часть» все равно даст вам ключ модификации контента.

Итак, мой вопрос прост: зачем нужно свойство для аргумента ключей в методе contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error:? И есть ли способ получить информацию, упомянутую в этих ключах, без второй части моего кода?

Спасибо.


person Dima Deplov    schedule 12.08.2013    source источник


Ответы (1)


Назначение ключей в contentOfDirectoryAtURL:includePropertiesForKeys:options:error: согласно документам: «Массив ключей сообщает объекту перечислителя о предварительной выборке и кэшировании информации для каждого элемента. Предварительная выборка этой информации повышает эффективность, касаясь диска только один раз». .

Вам по-прежнему нужно получить эти значения с помощью getResourceValue:forKey:error:, но теперь значения хранятся в самом объекте NSURL, поэтому вам не нужно снова обращаться к диску, чтобы получить их.

person rdelmar    schedule 12.08.2013