2014-10-02 64 views
2

我在使用NSMXLParser時遇到了問題。當'didEndElement'方法實施時,NSXMLParser崩潰

首先這裏是我的代碼:

class ViewController: UIViewController, NSXMLParserDelegate { 


    override func viewDidLoad() { 

     super.viewDidLoad() 

     var url = NSURL(string: "http://placeholder.abc/data.xml") 
     var xmlParser = NSXMLParser(contentsOfURL: url) 
     xmlParser.delegate = self 
     xmlParser.parse() 
    } 

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

    println(elementName) 
} 

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String, qualifiedName qName: String) { 

} 

func parser(parser: NSXMLParser, foundCharacters string: String) { 

} 

現在的問題是:當我在執行這行代碼實現didEndElement方法我的應用程序崩潰:xmlParser.parse()這個錯誤:Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

當我刪除didEndElement方法時,代碼運行良好。有人能幫我嗎?謝謝!

回答

3

我正在開發一個iOS應用程序,因爲它已經通過了Xcode的所有測試版本。該應用程序中的XMLParser部分具有此簽名:

func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!) { 
    ... 
} 

這可正常工作。

當我刪除了感嘆號,應用程序崩潰與EXC_BAD_ACCESS

NSXMLParserDelegate所有其他方法具有相同的簽名:全部的變量是隱含的約束展開自選(所有!)

+0

的感謝!那工作。 – 2014-10-02 13:02:31

+0

這在Xcode 6.1中不適用於我。它似乎首先起作用,但僅僅是因爲該函數不再被視爲委託函數,也沒有被調用。 – 2014-11-07 03:42:45