我跟随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错误,但在我向苹果抱怨之前,我想确保我没有错过任何东西。
答案 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 线程中调用了解析器。不要在网络回调中解析。这就是我的情况。