gpt4 book ai didi

ios - Swift NSXMLParserDelegate 不会被调用

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:46 26 4
gpt4 key购买 nike

我有一个奇怪的问题。奇怪的是,代码在 Playground 上执行得非常完美,但在模拟器中却没有……
长话短说,我有一个类应该解析我懒惰实例化并从 VC 调用解析方法的文档。解析函数在类中被调用而不是委托(delegate)函数(解析开始,找到字符等)。这有点令人抓狂,因为相同的设置在 Playground 上工作得很好......

解析类(和协议(protocol)):

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

VC 调用这个类:

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

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

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

任何帮助将不胜感激!

最佳答案

您替换了初始实例中的 parser 属性。

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

因此,init 中的 parser.delegate = self 完全没有意义。

尝试:

func fetch(){
println("fetch called")
parser = NSXMLParser(contentsOfURL: url)!
parser.delegate = self // <-- ADDED
parser.parse()
}

关于ios - Swift NSXMLParserDelegate 不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28249649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com