Получение Каталога Документов iPhone. Является ли NSSearchPathForDirectoriesInDomains единственным единственным способом? - PullRequest
9 голосов
/ 04 декабря 2009

Является ли функция NSSearchPathForDirectoriesInDomain s лучшим способом получения пути к каталогу документов iPhone? Я спрашиваю, потому что большинство тем, которые я вижу по этой теме, датированы прошлым годом, и все еще кажется довольно громоздким способом добраться до каталога, который обычно используется на iPhone. Можно подумать, что для этого уже есть удобный метод, похожий на bundlePath , executeablePath и т. Д. NSBundle

Просто чтобы прояснить, это означает вызов "NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES)" и возврат массива с путем Documents в индекс 0.

Ответы [ 3 ]

22 голосов
/ 05 декабря 2009

Базовый шаблон приложения на основе данных в XCode обеспечивает этот метод:

- (NSString *)applicationDocumentsDirectory {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}

Таким образом, похоже, что Apple продолжает одобрять получение каталога документов таким образом. Вы могли бы поместить его в категорию, я полагаю, но я обнаружил, что этого достаточно, чтобы включить этот метод в небольшую группу классов в данном приложении, которые должны выполнять работу в каталоге документов. Если вы делаете много файловых файлов повсеместно, вы можете подумать о рефакторинге своего кода, чтобы ограничить эти задачи одним или двумя классами менеджера.

Для меня, по крайней мере, в третий или четвертый раз, когда я сказал: «Эй, получение справочника документов - это боль в шее» - это был момент, когда я осознал некоторые возможности перенести жонглирование файлами в отдельный класс.

17 голосов
/ 29 октября 2012

Текущий шаблон приложения Core Data iOS в XCode обеспечивает этот метод:

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
2 голосов
/ 04 декабря 2009

Это работает для меня, довольно коротко и мило

   #define kDOCSFOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]

Ура! * * 1004

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...