ios - metas - meta tags online
¿Cómo puedo recuperar archivos locales con NSURL? (3)
Estoy aquí con una pregunta que probablemente tiene una respuesta muy simple que no estoy considerando ... ¿cómo puedo recuperar archivos locales con NSURL? Tengo esto aquí:
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()
}
Pero después de que se construye con éxito, se cuelga en var urlpath. He buscado alrededor y he intentado algunas sugerencias aquí y otros lugares en vano. ¿Por favor ayuda? :(
Debe usar URLForResource (_: withExtension :) en lugar de pathForResource:
let fileUrl = Bundle.main.url(forResource: "bpreg", withExtension: "xml")
Está intentando cargar un archivo desde su sistema de archivos, no desde la web.
Para crear el NSURL
debe usar el método de clase fileURLWithPath: .
Cambia tu método como:
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()
}
Nota: En Swift 3 también puede usar la clase de URL para construir la url en lugar de la clase NSURL
. Así que el código anterior para construir cambios de URL a:
let url = URL(fileURLWithPath: urlpath!)
Tu archivo aún no existe en tu paquete principal.
Debe agregar el archivo que está utilizando a su Bundle Resource.
Así que para añadirlo. Vaya a App Target -> Build Phases
y compruebe el Bundle Resource
y añádalo arrastrando y soltando.