나는 파서 클래스 (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)
이 작품 데이터가 다시로드되지만 요청하고 싶습니다.이 작업을 수행하는 올바른 방법입니까? 더 좋은 방법이 있습니까?
미리 감사드립니다.
특정 이벤트가 발생했을 때 B 클래스에서 A 클래스에 통지해야하는 경우 다음 두 가지 방법이 있습니다. 1. 대표를 쓸 수도 있습니다. 2. 이미했던 것처럼 NSNotificationCenter를 사용할 수 있습니다. 당신은 어느 하나를 사용할 수 있습니다, NSNotificationCenter 쉽고 적은 코드를 작성해야합니다. –
@BharatModi에 대한 귀하의 의견을 보내 주셔서 감사합니다! – Iavor