我有和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)
这样可以重新加载数据,但我想问一下,这是正确的方法吗?还有更好的方法吗?
提前致谢!
答案 0 :(得分:0)
使用委托是从另一个控制器重新加载表的正确方法。