У меня есть несколько функций вызова API в цепочке по мере необходимости, показывая окна hud PKHUD, который хорошо работает, но я не могу скрыть hud в viewWillDissapear, чтобы придать больше смысла, у меня есть profileViewController, который является частью UINavigationController, вложенного в tabBarcontroller в представлениииерархия, как это.
в profileVC у меня есть 3 функции для запроса данных из API-запроса, каждая из которых показывает hud, как это.
func loadData(){
routeClient.instance.getProfile(success: {[weak self] data in
guard let self = self else {return}
do{
let response = try JSONDecoder().decode(profile.self,
if requestManager.instance.user.findHouse! == 0{
PKHUD.sharedHUD.contentView = PKHUDProgressView(title: "title", subtitle: "Subtitle")
PKHUD.sharedHUD.show()
self.loadHouse()
}else{
PKHUD.sharedHUD.contentView = PKHUDProgressView (title: "tittle", subtitle: "subtitle")
PKHUD.sharedHUD.show()
self.loadAnnounce()
}
}
}catch{
print("error ocurrec in decoder \(error.localizedDescription)")
}
}, failure: {error in
print("error in data load \(error.localizedDescription)")
})
}
затем в loadHouse и функциях объявления загрузкис другим сообщением.
func loadHouse(){
routeClient.instance.getHouseByprofile(success:{[weak self] data in
guard let self = self else {return}
PKHUD.sharedHUD.contentView = PKHUDProgressView(title: "Procesando infromacion", subtitle: "")
PKHUD.sharedHUD.show()
if requestManager.instance.user.findHouse == 0{
do{
let response = try JSONDecoder().decode(houseModel.self, from: data)
if response.id != nil {
self.house = response
PKHUD.sharedHUD.contentView = PKHUDSuccessView(title: "title", subtitle: "")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}else{
print("the is is nil")
PKHUD.sharedHUD.contentView = PKHUDTextView(text: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}
}catch{
print("error en la decodificacion \(error.localizedDescription)")
PKHUD.sharedHUD.contentView = PKHUDErrorView(title: "title,", subtitle: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}
}else{
do{
let response = try JSONDecoder().decode(houseResponse.self, from: data)
PKHUD.sharedHUD.contentView = PKHUDErrorView(title: "title", subtitle: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
self.tableview.reloadData()
}catch{
PKHUD.sharedHUD.contentView = PKHUDErrorView(title: "title,", subtitle: "subtitle")
PKHUD.sharedHUD.show()
PKHUD.sharedHUD.hide(afterDelay: 1.5)
}
self.tableview.reloadData()
}
}, failure: {[weak self] error in
guard let self = self else {return}
print(error.localizedDescription)
self.tableview.reloadData()
})
}
func loadAnnounce(){
routeClient.instance.getAnnounceByProfile(success: {[weak self] data in
guard let self = self else {return}
do{
let json = try JSONDecoder().decode(getAnnounceResponse.self, from: data)
PKHUD.sharedHUD.hide()
if json.success!{
requestManager.instance.announce = (json.data?.count)! > 0 ? json.data![0] : nil
self.tableview.reloadData()
}
}catch{
PKHUD.sharedHUD.hide()
print(error.localizedDescription)
}
}, failure: {error in
PKHUD.sharedHUD.hide()
print(error.localizedDescription)
})
}
все, что работает нормально, как и должно, дело в том, чтобы изменить вкладку в tabbarcontroller, и hud еще не отображается в profileVC, затем загружается как profileVC, гдепредставлен viewController.то, что я пытался скрыть HUD, было следующим:
override func viewWillDisappear(_ animated: Bool) {
//PKHUD.sharedHUD.hide()
print("va a desaparecer")
PKHUD.sharedHUD.hide()
NotificationCenter.default.removeObserver(self, name: .didchangeTab, object: nil)
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
//self.navigationController?.navigationBar.barTintColor = .clear//UIColor.init(red: 106/255, green: 172/255, blue: 82/255, alpha: 1)
}
override func viewDidDisappear(_ animated: Bool) {
PKHUD.sharedHUD.hide()
}
, но ничего не работает, также добавлено уведомление в центр уведомлений для наблюдателя, когда tabBarController меняет элемент панели вкладок, но даже hud не скрывает, это происходит только тогда, когдаprofileVC загружается в первый раз, и теперь отображается HUD, поэтому, если пользователь нажимает на следующий элемент панели вкладок, загружаются другие контроллеры представления, а затем отображается HUD.Я также проверяю на утечки памяти, но не склеиваю, почему нет освобождения памяти от контроллера представления, даже когда viewWillDissappear выполняется.