Nssearchpathfordirectoriesindomains возвращает неправильный каталог

Я использую NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) чтобы получить каталог документов приложения в моем приложении, но возвращаемый массив содержит только один объект, и это недопустимый, неправильный каталог:

/ пользователи/me/библиотека/поддержка приложений/iPhone Simulator / документы

нашел этот вопрос что указывает на то, что проблема связана с предоставлением, но ответ говорит немного больше. Поэтому я думаю, что задаю дублирующий вопрос, но ответ на это вопрос недостаточен,поэтому я надеюсь получить реальный ответ в этом.

4 ответов


Мда ... поэтому одна из причин, по которой возвращаемый каталог может отличаться от ожидаемого для приложения, может быть связана с целевым типом Xcode. Это ведь не будет испытательной целью? в этом случае правильный ответ вполне может быть ответом без GUID приложения в нем, так как на самом деле это не приложение. Это компания Google групповой дискуссии подразумевает, что если это так, вы бы просто создать каталог.

как раз для усмешек, Я создал каталог / 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));

это работает для меня:

[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
                                        inDomains:NSUserDomainMask] lastObject];

вы можете попробовать это:

 /**
 Returns the path to the application's Documents directory.
 */
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

Я считаю, что вам не хватает только сообщения lastObject.


У меня такая же проблема, и в моем случае это потому, что я запускаю код из класса XCTest.

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

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

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

надеюсь, что это помогает.