2016-06-16 5 views
1

나는 파서 클래스 (NSXMLParser와 그 델리게이트 메소드를 사용하여 XML 데이터를 파싱한다)와 TableViewController (XML 데이터를 디스플레이한다)를 가지고있다. 파서 클래스에서, 나는 다음과 같은 코드를 사용하여 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가있는 TableView의 세포를 채우는 데 사용할 개체의 목록을 만들 수 있습니다. 그런 다음 파서 클래스는 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) 완료 핸들러의 끝에서 내 파서 클래스에이 코드를 추가

:

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

이 작품 데이터가 다시로드되지만 요청하고 싶습니다.이 작업을 수행하는 올바른 방법입니까? 더 좋은 방법이 있습니까?

미리 감사드립니다.

+2

특정 이벤트가 발생했을 때 B 클래스에서 A 클래스에 통지해야하는 경우 다음 두 가지 방법이 있습니다. 1. 대표를 쓸 수도 있습니다. 2. 이미했던 것처럼 NSNotificationCenter를 사용할 수 있습니다. 당신은 어느 하나를 사용할 수 있습니다, NSNotificationCenter 쉽고 적은 코드를 작성해야합니다. –

+0

@BharatModi에 대한 귀하의 의견을 보내 주셔서 감사합니다! – Iavor

답변

0

다른 컨트롤러에서 테이블을 다시로드하는 적절한 방법 인 대리인을 사용하십시오.

관련 문제