Swift中的parser.parse()会导致EXC_BAD_ACCESS

我正在关注这个教程,作为我在Swift中工作的RSS提要应用程序的一个开始。 自从本教程以来,我知道在Swift中有些事情已经发生了变化,但是他们都没有解释为什么我会遇到这个问题。

相关代码(据我所知)如下在我的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) } 

实际的parsing器委托方法似乎没有问题,因为我在这些方法上放置了断点,在崩溃之前甚至没有被调用。

我的假设是,这是一个Swift错误,但我想确保我没有错过任何东西,然后我去抱怨苹果。

自动翻译的头文件中似乎有一个错误,假定总是使用限定的名称空间,但是,因为它们有时可能是零,所以会崩溃。

如果你使用:

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

通过隐式地打开命名空间和qualifiedName参数(或者明确包装也应该可以),你应该很好。

您可能必须对您提供的所有采用namespaceURI或qualifiedName参数的委托方法进行类似的更改。

这个bug在XCode 6.1(6A1052c)中得到修复,就像@David已经提出的一样,但是为了logging,现在已经修复了。