Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

• attributes — словарь атрибутов, который можно передать системе. Эти атрибуты будут определять детали создания каталога. Здесь мы не будем использовать этот параметр, чтобы не усложнять пример. Но тут вы можете изменять такую информацию, как дата и время внесения изменений, дата и время создания, а также при желании и другие атрибуты созданного каталога;

• error — данный параметр принимает указатель на объект-ошибку типа NSObject. Этот объект будет заполняться любыми ошибками, которые могут возникать в процессе создания каталога. В принципе, целесообразно передавать объект-ошибку в этом параметре, так что, если он завершится неудачно (возвратит NO), вы сможете

обратиться к ошибке и определить, что именно пошло не так.

См. также

Раздел 12.1.

12.4. Перечисление файлов и каталогов

Постановка задачи

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

Решение

Используйте метод экземпляра contentsOfDirectoryAtPath: error:, относящийся к классу NSFileManager, как показано далее. В данном примере мы перечисляем все файлы, каталоги и символьные ссылки, расположенные в каталоге пакета с приложением:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSFileManager *fileManager = [[NSFileManager alloc] init];

NSString *bundleDir = [[NSBundle mainBundle] bundlePath];

NSError *error = nil;

NSArray *bundleContents = [fileManager

contentsOfDirectoryAtPath: bundleDir

error:&error];

if ([bundleContents count] > 0 &&

error == nil){

NSLog(@"Contents of the app bundle = %@", bundleContents);

}

else if ([bundleContents count] == 0 &&

error == nil){

NSLog(@"Call the police! The app bundle is empty.");

}

else {

NSLog(@"An error happened = %@", error);

}

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

// Точка переопределения для дополнительной настройки после запуска приложения

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Обсуждение

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

пользователь хочет скачать из Интернета 10 изображений и кэшировать их в вашем приложении. Вы выполняете эту операцию и сохраняете их, допустим, в каталоге tmp/images/, который создали вручную. Затем пользователь закрывает ваше приложение и вновь открывает его, а вы хотите отобразить в пользовательском интерфейсе вашей программы список уже загруженных файлов-изображений (в табличном виде). Как это сделать? Ничего сложного. Вам всего лишь потребуется перечислить содержимое вышеупомянутого каталога с помощью класса NSFileManager. Как было показано в подразделе «Решение» данного раздела, метод экземпляра contentsOfDirectoryAtPath: error:, относящийся к классу NSFileManager, возвращает массив объектов NSString, которые и соответствуют файлам, подкаталогам и символьным ссылкам внутри заданного каталога. Тем не менее непросто определить, какой из этих объектов является файлом, какой — подкаталогом и т. д. Чтобы получить от файлового менеджера более детализированную информацию, вызовите метод contentsOfDirec toryAtURL: includingPropertiesForKeys: options: error:. Рассмотрим параметры, которые можно передавать этому методу.

• contentsOfDirectoryAtURL — путь к каталогу, который вы хотите просмотреть. Этот путь должен предоставляться как экземпляр NSURL. Не волнуйтесь, если не знаете, как построить этот экземпляр. Вскоре мы об этом поговорим.

• includingPropertiesForKeys — это массив свойств, которые система iOS должна выбирать для каждого файла, каталога или элемента, найденного в конкретной директории. Например, вы можете указать, что в результатах должна возвращаться дата создания каждого элемента. Эта информация должна возвращаться в составе приходящего к вам экземпляра URL (или в экземплярах NSURL, получаемых от фреймворка). Вот список некоторых наиболее важных значений, которые могут находиться в этом массиве:

• NSURLIsDirectoryKey — позволяет постфактум определить, указывает ли один из возвращенных URL на каталог;

• NSURLIsReadableKey — возвращает дату создания того элемента, который расположен по возвращенному URL;

• NSURLContentAccessDateKey — в возвращаемых результатах передает дату последнего обращения к содержимому;

• NSURLContentModificationDateKey — как понятно из названия, это значение позволяет определять дату последнего изменения информации, расположенной по возвращенному URL.

• options — для этого параметра можно передать только одно из двух значений: 0 или NSDirectoryEnumerationSkipsHiddenFiles. Если введено второе значение, то, как понятно из его названия, при построении перечня будут пропущены все скрытые элементы.

• error — ссылка на объект, в который будет записываться информация об ошибке, если методу не удастся выполнить стоящую перед ним задачу. Обычно целесообразно передавать этому методу объекты-ошибки, если есть такая возможность. Если какие-то ошибки и будут возникать, то такие объекты помогут вам более уверенно с ними справляться.

Теперь, когда мы значительно более полно контролируем перечисление элементов, построим перечень всех элементов из каталога. app и выведем даты создания, последнего изменения элемента и последнего обращения к нему. Кроме того, будем выводить информацию о том, является ли этот элемент скрытым, а также есть ли у нас право считывания конкретного файла. Наконец, мы также укажем, являются конкретные элементы каталогами или нет. Приступим:

— (NSArray *) contentsOfAppBundle{

Поделиться:
Популярные книги

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Герцогиня в ссылке

Нова Юлия
2. Магия стихий
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Герцогиня в ссылке

Ну привет, заучка...

Зайцева Мария
Любовные романы:
эро литература
короткие любовные романы
8.30
рейтинг книги
Ну привет, заучка...

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Душелов. Том 3

Faded Emory
3. Внутренние демоны
Фантастика:
альтернативная история
аниме
фэнтези
ранобэ
хентай
5.00
рейтинг книги
Душелов. Том 3

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Возвышение Меркурия. Книга 5

Кронос Александр
5. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 5