【问题标题】:Objective-C - pathForResource always returns nilObjective-C - pathForResource 总是返回 nil
【发布时间】:2017-10-29 18:57:09
【问题描述】:

我想从某个目录读取 .plist 文件,但 pathForResource 总是返回 nil,这意味着它找不到我要查找的文件。这就是我用来创建路径的东西。该文件存储在 Project 文件夹中。

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"test" ofType: @"plist"];

我做错了什么?以及如何从不属于项目的目录访问 plist 文件?这是一个 macOS 命令行工具。

【问题讨论】:

  • -pathForResource:ofType: 用于加载包含在特定包中的文件;对于[NSBundle mainBundle],这意味着它作为您的应用程序的一部分提供。您必须确保该文件被选为 Xcode 侧边栏中特定目标的一部分(例如 i.stack.imgur.com/v3Z0A.jpg)。对于在项目之外加载文件——这取决于它们的位置。您是否希望文件位于特定位置?
  • 谢谢。是的,我希望文件位于特定位置。那么是否需要选择所有文件作为目标的一部分(大约 200 个文件)?我应该提一下,我不尝试创建一个 iOS 应用程序,而是一个命令行工具。
  • 一个 macOS 命令行程序没有资源包。
  • 可能是这里的问题,感谢您指出这一点。那么我该如何访问 plist 呢?
  • @Lukas 你不能,不能用命令行编程。至少不是来自任何捆绑包。您可以将 plist 文件存储在其他有用的文件夹中并在那里访问它。

标签: objective-c macos plist


【解决方案1】:

正如 cmets 所指出的,您不能使用 +[NSBundle mainBundle],除非您的应用是使用 .app/ 捆绑包构建的。如果您正在制作命令行应用程序(即单个二进制文件),那么要读取路径,您需要以不同的方式找出文件的位置。

当您说“文件存储在项目文件夹中”时,我不太确定您的意思。当然,您不会期望 .plist 文件挂在 /usr/bin 或您最终部署二进制文件的任何地方!如果您正在阅读的 plist 需要随应用程序一起提供,那么您应该使用捆绑包。相反,如果您在以某种方式运行应用程序时生成 plist(通过从 Web 下载它或通过增量存储内容来构建它),那么您应该在 Application Support directory 中为您的应用程序创建一个子文件夹,您可以在其中查询.plist。

获得 .plist 路径后,您可以使用+dictionaryWithContentsOfFile: 将其读入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 2012-02-27
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多