Подтвердить что ты не робот

Как получить локальные файлы с помощью NSURL?

Я здесь с вопросом, который, вероятно, имеет очень простой ответ, который я игнорирую... как я могу получить локальные файлы с помощью NSURL? У меня есть это здесь:

override func viewDidLoad() {
    super.viewDidLoad()
    var urlpath = NSBundle.mainBundle().pathForResource("bpreg", ofType: "xml")
    let url:NSURL = NSURL(string: urlpath!)!
    parser = NSXMLParser(contentsOfURL: url)!
    parser.delegate = self
    parser.parse()
}

Но после того, как он успешно построит, он зависает на var urlpath. Я искал вокруг и попробовал несколько предложений здесь и в других местах безрезультатно. Пожалуйста помоги?: (

4b9b3361

Ответ 1

Вы пытаетесь загрузить файл из своей файловой системы, а не из Интернета.

Для создания NSURL вам необходимо использовать метод fileURLWithPath:.

Измените свой метод следующим образом:

Swift 2

override func viewDidLoad()
{
    super.viewDidLoad()
    var urlpath     = NSBundle.mainBundle().pathForResource("bpreg", ofType: "xml")
    let url:NSURL   = NSURL.fileURLWithPath(urlpath!)!
    parser          = NSXMLParser(contentsOfURL: url)!
    parser.delegate = self
    parser.parse()
}

Swift 3

override func viewDidLoad()
{
    super.viewDidLoad()
    let urlpath     = Bundle.main.path(forResource: "bpreg", ofType: "xml")
    let url         = NSURL.fileURL(withPath: urlpath!)
    parser          = XMLParser(contentsOf: url)!
    parser.delegate = self
    parser.parse()
}

Примечание: В Swift 3 вы также можете использовать класс URL для построения URL вместо NSURL класс. Поэтому приведенный выше код для построения url изменяется на:

let url = URL(fileURLWithPath: urlpath!)

Ответ 2

Вы должны использовать URLForResource (_: withExtension:) вместо pathForResource:

let fileUrl = Bundle.main.url(forResource: "bpreg", withExtension: "xml")

Ответ 3

Ваш файл еще не существует в вашем основном пакете.

Вы должны добавить файл, который вы используете, в свой ресурс Bundle.

Итак, чтобы добавить его. Перейдите к App Target -> Build Phases и проверьте Bundle Resource и добавьте его, перетащив n '.