parser.parse() in Swift leads to EXC_BAD_ACCESS

2019-02-13 01:48发布

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.

2条回答
ゆ 、 Hurt°
2楼-- · 2019-02-13 01:49

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.

查看更多
Anthone
3楼-- · 2019-02-13 02:16

This bug is fixed in XCode Version 6.1 (6A1052c), in the same way @David has already suggested, but just for the record, it's fixed now.

查看更多
登录 后发表回答