从另一个类调用一个ViewController的TableView上的reloadData的正确方法是什么?

时间:2016-06-16 13:05:14

标签: ios xml swift parsing

我有和Parser Class(使用NSXMLParser及其委托方法解析XML数据)和TableViewController(显示XML数据)。在Parser类中,我使用以下代码检索XML数据:

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
        guard error == nil else {
            print(error)
            return
        }

        guard let data = data else {
            print("Data not received")
            return
        }

        let parser = NSXMLParser(data: data)
        parser.delegate = self
        parser.parse()
    }
task.resume()

解析数据后,我创建了一个对象列表,TableViewController将用它来填充其TableView的单元格。然后,Parser类必须告诉TableViewController在其TableView中重新加载数据。我这样做是通过在TableViewController中添加以下代码:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(EventsTableViewController.reloadData), name: "reloadData", object: nil)

func reloadData(notification: NSNotification) {
    if notification.name == "reloadData" {
        events = eventParser.events
        dispatch_async(dispatch_get_main_queue()) {
            self.tableView.reloadData()
            self.activityIndicator.stopAnimating()
        }
        addLocalNotifications()
    }
}

我还在上面的dataTaskWithURL(url)完成处理程序的末尾将此代码添加到我的Parser类中:

NSNotificationCenter.defaultCenter().postNotificationName("reloadData", object: self)

这样可以重新加载数据,但我想问一下,这是正确的方法吗?还有更好的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

使用委托是从另一个控制器重新加载表的正确方法。