2014-10-02 2 views
2

У меня проблема с использованием NSMXLParser.NSXMLParser сбой при использовании метода 'didEndElement'

первую очередь вот мой код:

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

спасибо! это сработало. –

+0

Это не сработало для меня в Xcode 6.1. Сначала он работал, но только потому, что функция больше не считалась функцией делегата и не вызывалась. –

Смежные вопросы