pathForResource 在 Mac OS X 控制台应用程序中返回 nil — Swift

Posted

技术标签:

【中文标题】pathForResource 在 Mac OS X 控制台应用程序中返回 nil — Swift【英文标题】:pathForResource returns nil in Mac OS X Console Application — Swift 【发布时间】:2015-01-05 00:20:34 【问题描述】:

使用命令行工具,我试图检索存储在名为 words.txt 的文件中的单词列表的路径。该文件被添加到项目中,包含在项目的 Target Membership 中,并在目标的 Copy Files 构建阶段被选中进行复制。 在 Main.swift 中这段代码:

if let path = NSBundle.mainBundle().pathForResource("words", ofType: "txt") 
  println("Path is \(path)")
 else 
  println("Could not find path")

打印“找不到路径”。 mainBundle() 类函数是要访问的正确包吗?关于为什么 pathForResource 函数返回 nil 的任何想法?

【问题讨论】:

【参考方案1】:

要将捆绑包与命令行工具一起使用,您需要确保将资源文件添加为构建阶段的一部分。听起来您很欣赏这一点,但没有正确执行。以下在快速演示应用中对我有用:

    将资源添加到您的项目中。

    在项目导航器中选择项目文件。

    添加一个新的复制文件阶段

    向您在第 3 步中添加的阶段添加第 1 步中的文件。为此,您可以单击 + 按钮(带圆圈),然后导航到相关文件。


当您构建项目时,您现在应该能够使用 NSBundle 访问文件的路径。

import Foundation

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("numbers", ofType: "txt")

if let p = path 
    let string = NSString(contentsOfFile: p,
        encoding: NSUTF8StringEncoding,
        error: nil)
    println(string)
 else 
    println("Could not find path")


// Output -> Optional(I am the numbers file.)

【讨论】:

非常感谢。这是一个很好的答案。【参考方案2】:

命令行工具不使用包,它们只是一个原始可执行文件,与复制文件构建阶段或NSBundle 类不兼容。

您必须将文件存储在其他位置(例如,~/Library/Application Support)。

【讨论】:

以上是关于pathForResource 在 Mac OS X 控制台应用程序中返回 nil — Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何在Mac OS X上安装 Ruby运行环境

如何在Mac OS X上安装 Ruby运行环境

Mac OS 的一点历史: Mac OS, Mac OSX 与Darwin

Mac OS如何恢复出厂设置?安装Mac OS系统教程

Mac OS如何恢复出厂设置?安装Mac OS系统教程

mac os 安装gcc