Swift中的parser.parse()导致EXC_BAD_ACCESS

时间:2014-09-11 17:47:03

标签: ios swift exc-bad-access nsxmlparser xcode6

我跟随this tutorial作为我在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)

}

实际的解析器委托方法似乎没有问题,因为我在它们上面放置了断点,它们甚至在崩溃之前都没有被调用。

我的假设是它是一个Swift错误,但在我向苹果抱怨之前,我想确保我没有错过任何东西。

3 个答案:

答案 0 :(得分:13)

自动翻译的标题中似乎有一个错误,它假设总是使用限定名称空格,但是,因为它们有时会为零,所以它会崩溃。

如果您使用:

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

通过隐式解包名称空间和qualifiedName参数(或明确包装应该也可以),你应该好好去。

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

答案 1 :(得分:0)

此错误已在XCode版本6.1(6A1052c)中修复, 以同样的方式@David已经建议, 但仅仅是为了记录,它现在已经修好了。

答案 2 :(得分:0)

如果您现在在 2021 年遇到 EXC_BAD_ACCESS,请检查您是否在主 UI 线程中调用了解析器。不要在网络回调中解析。这就是我的情况。