私は、(XMLデータを表示する)NSXMLParserとそのデリゲートメソッドを使用してXMLデータを解析するParserクラスとTableViewControllerを持っています。パーサクラスでは、私は次のコードを使用してXMLデータを取得:別のクラスからViewControllerのTableViewでreloadDataを呼び出す正しい方法は何ですか?
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は、そのテーブルビューのセルを移入するために使用するオブジェクトのリストを作成します。次に、パーサークラスはTableViewControllerにTableViewのデータをリロードするように指示する必要があります。この作品は
NSNotificationCenter.defaultCenter().postNotificationName("reloadData", object: self)
:私も上dataTaskWithURL(URL)完了ハンドラの終わりに私のパーサクラスにこのコードを追加
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()
}
}
:私は私のTableViewControllerに次のコードを追加することで、これを行いますデータは再ロードされますが、これを行うには正しい方法ですか?より良い方法がありますか?
ありがとうございます!
特定のイベントが発生したときにクラスをBクラスから通知する必要がある場合、次の2つの方法があります。1.代理人を書くことができます。 2.すでに行ったようにNSNotificationCenterを使用することができます。あなたはいずれかを使用することができます、NSNotificationCenterは簡単であり、少ないコードを書くことが必要です。 –
あなたのコメントをありがとう@BharatModi! – Iavor