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

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

Жанры

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

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

Шрифт:

Решение

Используйте метод экземпляра URLsForDirectory: inDomains:, относящийся к классу NSFileManager.

Обсуждение

Класс NSFileManager обеспечивает множество операций, связанных с файлами и каталогами, выполняемых в iOS. Все такие операции осуществляются прямо внутри ваших приложений, от вас требуется всего лишь создать экземпляр этого класса. Не рекомендую пользоваться разделяемым файловым менеджером, который предоставляется этим классом с помощью метода класса defaultManager, поскольку этот менеджер не является потокобезопасным. Лучше самостоятельно создать экземпляр класса NSFileManager и управлять им.

Метод экземпляра URLsForDirectory: inDomains:, относящийся к классу NSFileManager, позволяет искать конкретные каталоги в файловой системе iOS, в основном в песочнице вашего приложения. Этот метод имеет два параметра:

• URLsForDirectory: — это каталог, который вы хотите найти. Передайте этому параметру значение типа NSSearchPathDirectory (оно является перечислением). Далее поговорим о нем подробнее;

• inDomains — параметр указывает, где вы собираетесь искать конкретный каталог. Значение этого параметра должно относиться к типу NSSearchPathDomainMask (это тоже перечисление).

Предположим, вы хотите найти путь к каталогу Documents (Документы) вашего приложения. Вот как просто это делается:

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

NSArray *urls = [fileManager URLsForDirectory: NSDocumentDirectory

inDomains: NSUserDomainMask];

if ([urls count] > 0){

NSURL *documentsFolder = urls[0];

NSLog(@"%@", documentsFolder);

} else {

NSLog(@"Could not find the Documents folder.");

}

Как видите, создав собственный экземпляр NSFileManager, мы передали значение NSDocumentDirectory в качестве искомого каталога и NSUserDomainMask — в качестве области поиска. Рассмотрим некоторые наиболее важные значения, которые можно передать каждому из параметров метода экземпляра URLsForDirectory: inDomains:, относящегося к классу NSFileManager:

• URLsForDirectory;

• NSLibraryDirectory — библиотечный каталог приложения;

• NSCachesDirectory — каталог кэша — о нем рассказано ранее;

• NSDocumentDirectory — каталог документов;

• inDomains;

• NSUserDomainMask.

Данное значение указывает, что поиск должен выполняться в актуальном пользовательском каталоге. В системе OS X этот каталог обозначался бы ~/.

С помощью этого метода мы можем найти и другие каталоги, например caches, как показано далее:

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

NSArray *urls = [fileManager URLsForDirectory: NSCachesDirectory

inDomains: NSUserDomainMask];

if ([urls count] > 0){

NSURL *cachesFolder = urls[0];

NSLog(@"%@", cachesFolder);

} else {

NSLog(@"Could not find the Caches folder.");

}

Если вы хотите найти каталог tmp, воспользуйтесь функцией NSTemporaryDirectory на языке C, вот так:

NSString *tempDirectory = NSTemporaryDirectory;

NSLog(@"Temp Directory = %@", tempDirectory);

Выполнив эту команду на устройстве, получим примерно следующий вывод:

Temp Directory = /private/var/mobile/

Applications/<# Здесь находится ID вашего приложения #>/tmp/

См. также

Раздел 12.0.

12.2. Запись информации в файлы и считывание информации из файлов

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

Требуется сохранить на диске информацию (например, текст, данные, изображения и т. д.).

Решение

Все классы Cocoa, обеспечивающие сохранение информации, например NSString, UIImage и NSData, предоставляют методы экземпляра, позволяющие сохранять данные на диске по заданному пути.

Обсуждение

Чтобы сохранять текст на диске (предполагается, что ваш текст сохранен в экземпляре NSString или неизменяемой версии этого класса), можно воспользоваться методом экземпляра writeToFile: atomically: encoding: error:, относящимся к этому классу. Этот метод применяется со строками, представляющими собой пути назначения. Вот его отдельные параметры.

• writeToFile — путь к файлу, в который нужно записать информацию, указывается в виде строки.

• atomically — логическое значение. Если оно установлено в YES, то файл сначала будет записываться во временное пространство, а потом перемещаться на тот адрес, где вы хотите его расположить. Так гарантируется, что содержимое файла, которое требуется сохранить, сначала будет просто перенесено на диск, а уже затем пересохранено в месте назначения. Поэтому, если вдруг отказ системы iOS произойдет прежде, чем файл будет сохранен в месте назначения, контент будет доступен и позднее, когда операционная система возобновит работу. И вы сможете сохранить информацию куда следует. При сохранении информации рекомендуется устанавливать данное значение в YES, чтобы ни при каких обстоятельствах не терять информацию работающего приложения безвозвратно.

• encoding — кодировка текста, который вы хотите сохранить по указанному адресу. Обычно в данном случае используется кодировка UTF-8, задаваемая с помощью константы NSUTF8StringEncoding.

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

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

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Имя нам Легион. Том 15

Дорничев Дмитрий
15. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 15

Имперец. Том 4

Романов Михаил Яковлевич
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 4

Двойник Короля 7

Скабер Артемий
7. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 7

Изгой Проклятого Клана. Том 6

Пламенев Владимир
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6

Гнездо Седого Ворона

Свержин Владимир Игоревич
2. Трактир "Разбитые надежды"
Фантастика:
боевая фантастика
7.50
рейтинг книги
Гнездо Седого Ворона

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Моров. Том 5

Кощеев Владимир
4. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Моров. Том 5

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Неучтенный элемент. Том 2

NikL
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 2

Травница Его Драконейшества

Рель Кейлет
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травница Его Драконейшества

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

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

Старший лейтенант, парень боевой!

Зот Бакалавр
8. Героями не становятся, ими умирают
Фантастика:
боевая фантастика
5.00
рейтинг книги
Старший лейтенант, парень боевой!