NSBundle.mainBundle().URLForResource("bach1", withExtension: "jpg")
上面的代码返回null。
为了检查文件是否存在,我使用了以下代码:
let fileManager = NSFileManager.defaultManager()
if fileManager.fileExistsAtPath(savepath) {
println("exist")
}
上面的代码返回该文件存在于目录中。
所以我不明白为什么第一个代码返回null
答案 0 :(得分:12)
你的问题是NSBundle.mainBundle()。URLForResource(“bach1”,withExtension:“jpg”)返回一个可选的NSURL。您需要使用if let打开它并从返回的URL中提取文件路径,如下所示:
if let resourceUrl = NSBundle.mainBundle().URLForResource("bach1", withExtension: "jpg") {
if NSFileManager.defaultManager().fileExistsAtPath(resourceUrl.path!) {
print("file found")
}
}
答案 1 :(得分:8)
Swift 3.x
if let resourceUrl = Bundle.main.url(forResource: "bach1", withExtension: "jpg") {
if FileManager.default.fileExists(atPath: resourceUrl.path) {
print("file found")
}
}
答案 2 :(得分:3)
我发现你必须真正进入Build Phases - >复制捆绑资源并有时手动将项目添加到捆绑包中。就我而言,它是一个视频文件,并没有正确地添加到捆绑包中。
答案 3 :(得分:2)
NSBundle.URLForResource
仅返回在构建/编译时捆绑在应用程序中的文件,例如将文件拖入Xcode项目并将其添加到应用程序目标时。当您的应用程序预装了您需要的资源(如图像,电影,数据库和其他文件)时,通常可以使用此功能。
似乎savepath
是您的应用程序在运行时写入的路径(可能是您的应用程序的Documents目录?)。因此,该文件位于包之外,如果您将来需要引用该文件,则需要将该路径/ URL存储在某处(或重新构建)。
答案 4 :(得分:1)
我也有这个问题。我的修复是: