NSSearchPathForDirectoriesInDomains возвращает неверный каталог
Я использую NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
, чтобы получить каталог документов приложения в моем приложении, но возвращаемый массив содержит только один объект и невосстанавливаемый неправильный каталог:
/Пользователи/me/Library/Поддержка приложений/Симулятор iPhone/Документы
Я нашел этот вопрос, который указывает на то, что проблема связана с инициализацией, но ответ говорит немного больше. Поэтому я предполагаю, что задаю двойной вопрос, но ответа на этот вопрос недостаточно, поэтому я надеюсь получить реальный ответ в этом вопросе.
Ответы
Ответ 1
Хм... поэтому одна из причин возврата каталога может отличаться от того, что ожидаемое для приложения может быть связано с типом целевого объекта Xcode. Это не будет целью тестирования? в этом случае правильным ответом может быть ответ без GUID приложения в нем, поскольку на самом деле это не приложение. Это обсуждение google group подразумевает, что если это так, вам будет полезно просто создать каталог.
Просто для усмешки я создал каталог /Users/me/Library/Application Support/iPhone Simulator/Documents из окна терминала, и теперь он запускается. Есть еще ошибки теста, но они могут быть реальными.
Я бы рекомендовал вам изменить тестовое приложение, чтобы создать каталог документов, если он отсутствует - что-то вроде:
if(![[NSFileManager defaultManager] createDirectoryAtPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) withIntermediateDirectories:YES attributes:nil error:NULL])
NSLog(@"Error: Create folder failed %@", NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES));
Ответ 2
Это работает для меня:
[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] lastObject];
Ответ 3
Вы можете попробовать следующее:
/**
Returns the path to the application Documents directory.
*/
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
Я считаю, что вы пропускаете сообщение lastObject.
Ответ 4
У меня такая же проблема, и в моем случае это потому, что я запускаю код из класса XCTest.
Я предполагаю, что тесты не выполняются в изолированной программной среде приложения.
Это потому, что мои тесты связаны с проектом статической библиотеки, включенным в основной проект.
Как только я запускаю тот же самый код из запуска моего приложения, пути возвращаются правильно.
Надеюсь, что это поможет.