Swift NSXMLParserDelegate не вызывается

У меня странная проблема. Странность проистекает из того факта, что код выполняется просто идеально на игровой площадке, но не в симуляторе...
Короче говоря, у меня есть класс, который должен анализировать документ, который я создаю, и вызывать метод анализа из VC. Функция синтаксического анализа вызывается в классе, но не функции делегата (начался синтаксический анализ, найдены символы и т. Д.). Это как-то сводит с ума, так как на игровой площадке все отлично работает...

Класс синтаксического анализа (и протокол):

protocol DefintionFetching {
    func fetchingDidFinish(results: [String: NSMutableAttributedString])
}

class DefinitionFetcher: NSObject, NSXMLParserDelegate {
    var delegate: DefintionFetching

    var parser = NSXMLParser()
    let url = NSURL(string: "http://dexonline.ro/definitie/soapta/xml")!

    var element = String()
    var finalDefinitions = [String: NSMutableAttributedString]()

    init(delegate: DefintionFetching) {
        self.delegate = delegate
        super.init()
        parser.delegate = self
    }

    func fetch() {
        println("fetch called") // this gets called
        parser = NSXMLParser(contentsOfURL: url)!
        parser.parse()
    }

    func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject: AnyObject]!) {
        // this doesn't get called
    }
}

И ВК, вызывающий класс:

class DexVC: UIViewController, DefintionFetching {
    lazy var definitionFetcher: DefinitionFetcher = DefinitionFetcher(delegate: self)

    func fetchingDidFinish(results: [String: NSMutableAttributedString]) { }

    @IBAction func doShit(sender: AnyObject) {
        definitionFetcher.fetch()
    }
}

Любая помощь будет безумно высоко оценена!

1 ответ

Решение

Вы заменили parser свойство из первоначального экземпляра.

func fetch(){
    println("fetch called")
    parser = NSXMLParser(contentsOfURL: url)!
//  ^^^^^^^^^ HERE
    parser.parse()
}

так, parser.delegate = self в init совершенно бессмысленно.

пытаться:

func fetch(){
    println("fetch called")
    parser = NSXMLParser(contentsOfURL: url)!
    parser.delegate = self // <-- ADDED
    parser.parse()
}
Другие вопросы по тегам