NSBundle.mainBundle (). PathForResource возвращает nil

Я пытаюсь написать простую оболочку IO для Swift.

Чтобы проверить это, у меня есть файл с именем Test.txt в корне моего проекта.

Я добавил этот файл для создания фаз в Build Bundle Resources, как это было предложено всеми, у кого была эта проблема.

Ресурсы сборки Bundle

Я реализовал очень простой класс 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 println(self.bundle) } 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)! } } 

Когда я печатаю содержимое пакета, я получаю URI в определенное место в моей файловой системе, которое, я полагаю, является виртуальным расположением приложения в симуляторе. Навигация к нему показывает, что он действительно содержит мой файл «Test.txt».

Теперь все, что я хочу сделать, это получить путь к этому файлу.

Я делаю это, вызывая: self.bundle.pathForResource("Test.txt", ofType: "txt")

Это возвращает "nil"

Зачем? 🙂

  • Как загрузить изображение из Assets.car (скомпилированной версии xcassets) в NSBundle? (без использования CocoaPods)
  • iOS - передача данных в толкнул viewcontroller
  • Внешний объект в раскадровки
  • Кто-нибудь пытался разместить скомпилированный код в NSBundle и загрузить его во время выполнения?
  • Скопируйте изображения из приложения в Каталог документов и перепишите их после него.
  • Локализованная строка в Foundation.framework не найдена
  • Получить ссылку Bundle из Path in Swift
  • доступ к файлу с использованием pathForResource: ofType: inDirectory:
  • 6 Solutions collect form web for “NSBundle.mainBundle (). PathForResource возвращает nil”

    Не включайте .txt в параметр name , передайте его как параметр расширения .
    Из документации :

    расширение
    Расширение имени файла для поиска.
    Если вы укажете пустую строку или nil, предполагается, что расширение не существует, и файл является первым найденным файлом, который точно соответствует имени.

    Swift3

     let bundle = Bundle.main let path = bundle.path(forResource: "Test", ofType: "txt") 

    Swift1 & Swift2

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

    Objective-C

     NSBundle* bundle = [NSBundle mainBundle]; NSString* path = [bundle pathForResource:@"Test" ofType:@"txt"]; 

    В swift 3.0 напишите

     let path = Bundle.main.path(forResource: "Test", ofType: "txt") 

    Замените

      let path = self.bundle.pathForResource("Test.txt", ofType: "txt") 

    с

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

    замещать

     let path = self.bundle.pathForResource("Test.txt", ofType: "txt") 

    с

     let path = self.bundle.pathForResource("Test", ofType: "txt") 

    Параметр ofType добавляется к имени ресурса, поэтому замените эту строку:

      let path = self.bundle.pathForResource("Test.txt", ofType: "txt") 

    к чему-то вроде этого:

      let path = self.bundle.pathForResource("Test", ofType: "txt") 

    Ресурсы сборки Bundle также необходимы для проверки.

    Еще одна причина для NSBundle.mainBundle (). PathForResource возвращает nil, файл не добавляется к цели целиком. Когда вы перетаскиваете файл в комплекте, убедитесь, что установлен флажок «Добавить в цель» и «Копировать элементы, если необходимо».

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.