2016-06-16 9 views
1

私は、(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に次のコードを追加することで、これを行いますデータは再ロードされますが、これを行うには正しい方法ですか?より良い方法がありますか?

ありがとうございます!

+2

特定のイベントが発生したときにクラスをBクラスから通知する必要がある場合、次の2つの方法があります。1.代理人を書くことができます。 2.すでに行ったようにNSNotificationCenterを使用することができます。あなたはいずれかを使用することができます、NSNotificationCenterは簡単であり、少ないコードを書くことが必要です。 –

+0

あなたのコメントをありがとう@BharatModi! – Iavor

答えて

0

他のコントローラからテーブルをリロードする適切な方法であるデリゲートを使用します。

関連する問題