XMLParser не работает на реальных AppleWatch - PullRequest
1 голос
/ 17 января 2020

У меня есть немного сложный вопрос. Я начинающий по-быстрому. Мой проект собирается создать приложение, чтобы показать на моих часах, сколько посетителей в бассейне. Данные поступают с URL в XML. Мне нужно проанализировать XML до двух значений и установить его в TextField. На Симуляторе все хорошо работает с Apple Watch S5 40 мм. Но на реальном устройстве с той же моделью это не работает. Это останавливается где-то в разборе. Я пытался почти все, поиск, но безрезультатно.

Мой код:

import WatchKit
import Foundation

class InterfaceController: WKInterfaceController, XMLParserDelegate {

    var nazev: String?
    var parser = XMLParser()
    var currentValue: String?
    var registrationResult: String?

    @IBOutlet weak var celkemField: WKInterfaceTextField!

    @IBOutlet weak var aktualneField: WKInterfaceTextField!


    @IBAction func update() {

        let urlString = URL(string: "https://www.plovarnaluhacovice.cz/pocet-navstevniku.php")

        nazev = "pocetAktualni"

        let parser = XMLParser(contentsOf: urlString!)!
        let parserDelegate = self
        parser.delegate = parserDelegate
        guard
            parser.parse(),
            let result = parserDelegate.registrationResult
        else { return }

        aktualneField.setText(result)
    }

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        update()
    }

    override func willActivate() {
        super.willActivate()
    }

    override func didDeactivate() {
        super.didDeactivate()
    }

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
        if elementName == nazev {
            currentValue = ""
        }
    }

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        if elementName == nazev {
            registrationResult = currentValue
            currentValue = nil
        }
    }

    func parser(_ parser: XMLParser, foundCharacters string: String) {
        currentValue? += string
    }

    func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
        print("failure error: ", parseError)
        aktualneField.setText("chyba")
    }

}

...