Swift 4 - синтаксический анализ XML с UITableView - PullRequest
0 голосов
/ 11 мая 2018

Я хочу получить значения из XML URL, но у меня нет ошибок.Я пытаюсь понять свою ошибку.Вот мой код:

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,XMLParserDelegate {
    @IBOutlet weak var tblView: UITableView!

    var parser = XMLParser()
    var haberler = NSMutableArray()
    var elements = NSMutableDictionary()
    var element = NSString()
    var title1 = NSMutableString()
    var link = NSMutableString()

    override func viewDidLoad() {

        super.viewDidLoad()
        parsinDataFromURL()

    }

Моя функция для разбора xml

    func parsinDataFromURL() {
        haberler = []

        parser = XMLParser(contentsOf: NSURL(string: "http://www.haberturk.com/rss/kategori/gundem.xml")! as URL)!

        parser.delegate = self
        parser.parse()
        tblView.reloadData()
    }

Функции didStartElement, FoundCharacters и didEndElement

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
        if (elementName as NSString) .isEqual(to: "item") {

            elements = NSMutableDictionary()
            elements = [:]
            title1 = NSMutableString()
            title1 = " "
            link = " "
        }
    }

    func parser(_ parser: XMLParser, foundCharacters string: String) {
        if element .isEqual(to: "title") {
            title1.append(string)
        }
        else if element.isEqual(to: "link") {
            link.append(string)
        }
    }

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        if (elementName as NSString) . isEqual(to: "item") {
            if !title1.isEqual(nil) {
                elements.setObject(title1, forKey: "title" as NSCopying)
            }

            if !link .isEqual(nil) {
                elements.setObject(link, forKey: "link" as NSCopying)
            }

            haberler.addObjects(from: [elements])
        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return haberler.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        var cell = tableView.dequeueReusableCell(withIdentifier: ("myCell"))! as UITableViewCell

        if (cell.isEqual(NSNull.self)) {
            cell = Bundle.main.loadNibNamed("myCell", owner: self, options: nil)![0] as! UITableViewCell    
        }

        cell.textLabel?.text = (haberler.object(at: indexPath.row) as AnyObject).value(forKey: "title") as? String

        cell.detailTextLabel?.text = (haberler.object(at: indexPath.row) as AnyObject).value(forKey: "title") as? String

        return cell
    }
}

Когда я бегу в симуляторе, UITableView пуст (пустой UITableView: https://imgur.com/a/KglwSvS)

1 Ответ

0 голосов
/ 11 мая 2018

Вы должны реализовать

func parserDidEndDocument(_ parser: XMLParser) {

    tblView.reloadData()
}

//

убедитесь, что вы установили источник данных таблицы в viewDidLoad

self.tblView.dataSource = self
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...