Jamin Becker Jamin Becker - 1 year ago 117
iOS Question

NSBundle.mainBundle().pathForResource returns nil

I am trying to write a simple IO wrapper for Swift.

To test this I have a file named "Test.txt" in my project root.

I have added this file to Build Phases within Build Bundle Resources, as suggested by everyone else who has had this problem.

Build Bundle Resources

I have implemented a very simple File class with one read function with the intent to output the contents of the file.

class File2{
let resourceName: String
let type: String
let bundle = NSBundle.mainBundle()

init(resourceName: String, type: String = "txt"){
self.resourceName = resourceName
self.type = type

func read(){
let path = self.bundle.pathForResource("Test.txt", ofType: "txt") //Hard coded these in just to make sure Strings contained no whitespace
println(path) //This returns nil...why?
var error:NSError?
//print(String(contentsOfFile:path!, encoding:NSUTF8StringEncoding, error: &error)!)
//return String(contentsOfFile:path!, encoding:NSUTF8StringEncoding, error: &error)!

When I print the contents of the bundle I get a URI to a specific location on my filesystem, which I assume is the virtual location of the app in the simulator. Navigating to it reveals that it does indeed contain my "Test.txt" file.

Now all I want to do is get the path to that file.

I do this by calling:
self.bundle.pathForResource("Test.txt", ofType: "txt")

This returns "nil"

Why? :)

Answer Source

Do not include the .txt in filename:

self.bundle.pathForResource("Test", ofType: "txt")
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download