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.

Я предполагаю, что тесты не выполняются в изолированной программной среде приложения.

Это потому, что мои тесты связаны с проектом статической библиотеки, включенным в основной проект.

Как только я запускаю тот же самый код из запуска моего приложения, пути возвращаются правильно.

Надеюсь, что это поможет.