0

我在链中有几个 api 调用函数,根据需要显示 PKHUD hud 窗口,hud 运行良好,但我无法在 viewWillDissapear 中隐藏 hud,为了更有意义,我有 profileViewController,它是 UINavigationController 的一部分,它嵌套在视图层次结构中的 tabBarcontroller 中,像这样.在此处输入图像描述

在 profileVC 中,我有 3 个函数从 APIrequest 请求数据,每个函数都显示这样的 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 和 load 通知函数中使用不同的消息。

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)
    })
}

一切正常,事情是 ii 更改 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 时视图控制器也没有从内存中解除分配。

4

0 回答 0