【问题标题】:NSSearchPathForDirectoriesInDomains returns the wrong directoryNSSearchPathForDirectoriesInDomains 返回错误的目录
【发布时间】:2011-09-24 20:25:01
【问题描述】:

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

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

我发现this question 表明问题与配置有关,但答案仅此而已。所以我想我在问一个重复的问题,但这个问题的答案是不够的,所以我希望在这个问题中得到一个实际的答案。

【问题讨论】:

  • 这个问题的答案确实令人非常不满意。当您在这里找到解决方案时,请标记一个模组以合并/关闭另一个模组。
  • 控制台是否显示任何错误?
  • 其他一些答案/cmets 似乎表明这个函数实际上可能返回一个包含 多个 目录的数组。你能检查一下是否是吗?
  • Hmm ...所以返回目录的一个原因可能与您对应用程序的期望可能与 Xcode 目标类型有关。这不会是一个测试目标吧?在这种情况下,正确的答案很可能是没有应用程序 GUID 的答案,因为实际上它不是应用程序。这个 google 小组讨论暗示,如果是这种情况,您只需创建目录即可:groups.google.com/group/google-toolbox-for-mac/browse_thread/…
  • 只是为了笑,我从终端窗口创建了目录 /Users/me/Library/Application Support/iPhone Simulator/Documents,现在它似乎可以运行了。仍然存在测试错误,但这些错误可能是真实的。

标签: objective-c ios cocoa-touch nsdocumentdirectory


【解决方案1】:

这对我有用:

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

【讨论】:

  • 感谢您的回答。不幸的是,URLsForDirectory:inDomains: 仅适用于 iOS 4.0 及更高版本,我支持 3.1.3。还有其他方法可以找到这个 4.0 之前可用的目录吗?
  • 我没有给你答案,但你为什么还支持 3.x?对于
  • 我尝试了这种方法,但遇到了同样的问题。它给了我与 NSSearchPathForDirectoriesInDomains 完全相同的目录。
【解决方案2】:

你可以试试这个:

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

我相信你只是错过了 lastObject 消息。

【讨论】:

  • 谢谢。事实上,这就是我正在做的事情 - 从 lastObject 返回的 NSString 是问题中指定的不正确路径。
  • @Josh Brown 消息是否在数组中返回超过 1 个项目?您是否尝试写入任何返回路径?
  • @Josh Brown 问题也可能出在 msg stringByAppendingPathComponent: 如果你没有传递一个有效的文件名。
【解决方案3】:

嗯...所以返回的目录可能与您对应用程序的期望不同的一个原因可能与 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));

【讨论】:

    【解决方案4】:

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2018-02-06
      • 2012-09-27
      • 2020-08-16
      • 2011-10-05
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多