Говоря об этом приложении, необходимо отметить, что мы используем метод экземпляра getResourceValue: forKey: error:, относящийся к классу NSURL, чтобы получить значение каждого из ключей, запрашиваемых у файлового менеджера, — например, даты создания и последнего изменения элемента. Эти требования мы передаем файловому менеджеру и приказываем ему выбрать эту информацию. Затем, как только у нас будут нужные URL, воспользуемся вышеупомянутым методом для получения различных свойств от результирующих URL.
Итак, рассмотрим различные части приложения. Я просто объясню, что делает каждый из написанных нами методов.
• contentsOfAppBundle — этот метод выполняет поиск в каталоге. app и находит все его элементы (файлы, подкаталоги, символьные ссылки и др.), после чего возвращает результат в виде массива. Все элементы в этом массиве относятся к типу NSURL и содержат дату собственного создания, последнего изменения, а также другие атрибуты, рассмотренные ранее.
• stringValueOfBoolProperty: ofURL: — этот метод выбирает строковый эквивалент (Yes или No) логического свойства URL. Например, информация о том, указывает конкретный URL на каталог или нет, сохраняется как двоичное логическое значение. Однако если вы хотите вывести это логическое значение на консоль, то его нужно преобразовать в строку. Для каждого URL у нас есть два элемента запроса, которые будут возвращать экземпляры NSNumber. Каждый из этих экземпляров (NSURLIsDirectoryKey и NSURLIsReadableKey) содержит логическое значение. Итак, нам не приходится писать этот код для преобразования дважды, поскольку есть специальные методы для преобразования NSNumber в строку Yes или No.
• isURLDirectory: — принимает URL и проверяет, является ли он каталогом. На внутрисистемном уровне этот метод использует метод stringValueOfBoolProperty: ofURL: и передает ему ключ NSURLIsDirectoryKey.
• isURLReadable: — определяет, обладает ли ваше приложение доступом на чтение по указанному URL. На внутрисистемном уровне этот метод также использует метод stringValueOfBoolProperty: ofURL: и передает ему ключ NSURLIsDirectoryKey.
• dateOfType: inURL: — поскольку мы собираемся просматривать у каждого URL, соответствующего NSDate, свойства трех типов, просто инкапсулируем в данный метод нужный для этого код. Метод будет принимать ключ и возвращать в URL дату, ассоциированную с конкретным ключом.