Определение местоположения каталога Documents
Поскольку наше приложение "обитает" в папке с, казалось бы, произвольно выбранным именем, то как мы можем найти полный путь к каталогу Documents для чтения и записи своих файлов? В действительности все очень просто. С помощью С-функции NSSearchPathFor DirectoriesInDomain() местоположение каталогов будет определяться за вас. Как функция из библиотеки Foundation, она используется средой разработки Cocoa для системы Mac OS X.
Многие ее доступные варианты разработаны для системы Mac OS X и не возвращают значения в системе iOS либо потому, что такие адреса не существуют в iOS (например, папка Downloads), либо потому, что ваше приложение не имеет прав доступа к ресурсу из-за iOS-механизма обеспечения безопасности, именуемого "песочницей" (sandboxing).
Вот, например, как выглядит код определения пути к каталогу Documents:
NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString documentsDirectory » [paths objectAtIndex:0);
Константа NSDocumentDirectory означает, что мы ищем путь к каталогу Documents. Вторая константа, NSUserDomainMask, говорит о том, что мы хотим ограничить поиск "песочницей" нашего приложения. В системе Mac OS X та же самая константа используется в случае, когда нам нужно, чтобы функция выполняла поиск в главном каталоге (home directory) попьзователя (вероятно, этим и объясняется несколько странное имя константы).
Хотя функция возвращает целый массив совпадающих путей, мы можем рассчитывать на то, что наш каталог Documents будет располагаться в позиции с индексом 0. Почему? Мы знаем, что только один каталог отвечает заданному нами критерию, поскольку каждое приложение имеет только один каталог Documents. Мы можем создать имя файла, присоединив другую строку к концу пути, который только что получили. Поэтому воспользуемся методом stringByAppendingPathComponent из класса NSString, разработанным как раз для таких целей.
NSString filename [documentsDirectory StringByAppendingPathComponent:@ntheFile.txt”!;
После этого вызова переменная filename будет содержать полный путь к файлу theFile. txt, расположенному в каталоге Documents нашего приложения, и мы сможем использовать переменную filename для создания файла и выполнения операций чтения и записи.
- Дата: 27-12-2014, 15:58