我正在尝试了解委托(delegate)如何为项目工作。这个想法是从 watch 应用程序的 TableView 中选择一个部分,并在手机上解析 xml。但是,当我单击某个部分以启动解析器时,什么也没有发生。
因此,当手机加载时,我执行以下操作。
override func viewDidLoad() {
super.viewDidLoad()
parser.delegate = self
if (WCSession.isSupported()) {
print("Phone Connected")
session = WCSession.default()
session.delegate = self
session.activate()
}
}
当我点击一个部分将消息从 watch 发送到手机时,我尝试开始解析 url 的数据。
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
parseSection(s: message["section"]! as! String)
}
func parseSection(s: String){
let link = "http://www.espn.com/espn/rss/" + s
let url : URL = URL(string: link)!
parser = XMLParser(contentsOf: url)!
parser.parse()
}
但是下面的委托(delegate)什么都不做。
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
print("Parser Begins")
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
print("Characters Found")
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
print("Parser Ends")
}
最佳答案
您的类需要实现 XMLParserDelegate
协议(protocol)才能调用解析函数。您已经这样做了,但是您错过了为 XMLParser 设置委托(delegate):
func parseSection(s: String){
let link = "http://www.espn.com/espn/rss/" + s
let url : URL = URL(string: link)!
parser = XMLParser(contentsOf: url)!
parser.delegate = self // <-- set the delegate
parser.parse()
}
关于ios - 数据从 watch 发送到手机后未调用 Swift 3 XML 解析委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41094127/