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()
}