Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

parser.parse() in Swift leads to EXC_BAD_ACCESS

I'm following this tutorial as a jump start for an RSS feeder app I'm working on in Swift. I know there are some things that have changed in Swift since this tutorial, but none of them seem to explain why I'm having this issue.

Relevant Code (as far as I can tell) is as follows in my TableViewController:

 override func viewDidLoad() {
    super.viewDidLoad()

    let url:NSURL = NSURL(string: "my.url.string")
    parser = NSXMLParser(contentsOfURL: url)
    parser.delegate = self
    parser.parse() // <- Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

}

There doesn't seem to be a problem with the actual parser delegate methods as I put breakpoints on them and they aren't even being called before the crash.

My assumption is that it's a Swift bug, but I wanted to make sure I wasn't missing something before I go complaining to apple about it.

like image 517
ShivKatall Avatar asked Sep 11 '14 17:09

ShivKatall


1 Answers

There seems to be an error in the automatically translated headers that assumes that qualified name spaces are always used, however, since they can be nil sometimes, it crashes.

If you use:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!)

by making the namespace and qualifiedName parameters implicitly unwrapped (or explicitly wrapped should work as well) you should be good to go.

You'll probably have to make similar changes for any delegate methods you provide that take namespaceURI or qualifiedName parameters.

like image 51
David Berry Avatar answered Oct 04 '22 18:10

David Berry