NSSearchPathForDirectoriesInDomains返回错误的目录

时间:2011-06-29 05:06:28

标签: objective-c ios cocoa-touch nsdocumentdirectory

我正在使用NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)来获取应用程序中的应用程序文档目录,但返回的数组只包含一个对象,而且这是一个不可写的,不正确的目录:

/ Users / me / Library / Application Support / iPhone Simulator / Documents

我发现this question表示问题与配置有关,但答案只是说明了。所以我想我问的是一个重复的问题,但是这个问题的答案是不够的,所以我希望在这个问题上得到一个真正的答案。

4 个答案:

答案 0 :(得分:7)

嗯......所以返回目录的一个原因可能与您对应用程序的期望可能与Xcode目标类型有关。这不会是一个测试目标吗?在这种情况下,正确的答案很可能是没有应用程序GUID的答案,因为实际上它不是一个应用程序。这个google group discussion意味着如果是这种情况,只需创建目录就可以了。

只是为了笑容,我从终端窗口创建了目录/ 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));

答案 1 :(得分:2)

这对我有用:

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

答案 2 :(得分:1)

你可以试试这个:

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

我相信你只缺少lastObject消息。

答案 3 :(得分:0)

我遇到了完全相同的问题,在我的情况下,这是因为我正在运行XCTest类中的代码。

我的猜测是测试不在应用程序沙箱中运行。

那是因为我的测试与包含在主项目中的静态库项目有关。

只要从我的应用程序运行中运行完全相同的代码,就会正确返回路径。

希望这有帮助。