【问题标题】:Removing UIActivityIndicator inside a completion handler in swift 3在 swift 3 中删除完成处理程序中的 UIActivityIndi​​cator
【发布时间】:2017-06-16 07:21:26
【问题描述】:

我想在完成我的块后删除我的活动指示器。所以我做了这样的事情。

func workflowSelected()
{
    self.btnWorkflow.setTitle(dm.workflowName, for: .normal)


    self.actIndApprover=UIActivityIndicatorView.init(frame: CGRect.init(x: self.btnFirstApprover.frame.size.width-40, y: 5, width: 30, height: 30))
    self.actIndApprover.color=self.com.getfontColor()
    self.actIndApprover.startAnimating()
    self.btnFirstApprover.addSubview(self.actIndApprover)

    self.callingFirstApprovers() { (staus) in



        self.actIndApprover.stopAnimating()
        self.actIndApprover.removeFromSuperview()
        self.actIndApplyLeave.stopAnimating()
        self.actIndApplyLeave.removeFromSuperview()
        self.btnFirstApprover.addTarget(self, action: #selector(self.approverClicked), for: .touchUpInside)

        if(staus)
        {
            print("Approvers loaded")


             NotificationCenter.default.post(name: NSNotification.Name(rawValue: "approverSelected"), object: nil)



        }

        else
        {

            self.btnFirstApprover.setTitle(self.lan.getConvertedLanguageString(word: "First Approver"), for: .normal)
        }
    }
}

但是这个活动指示器永远不会删除。我需要在主线程上删除它吗?如果是这样,我该怎么做。请帮我。 谢谢

更新

func callingFirstApprovers(callback:@escaping(Bool)->Void)
{
    let strBindedParam="workflowId=\(dm.workflowID!)&requesterCode=\(dm.strEmpCode!)&levelId=1"
    let appendString=com.getServicePath(funcNAme: "workflow")
    restAPI.prepareUrl(baseUrl:dm.tenantUrl,appendString: appendString, bindedParams: strBindedParam, isAuthorized: true, method: .get, jsonBody: [:]) { (status) in

        if(status=="success")
        {
            self.com.removeProgress()
            print(self.dm.responseArray)
            self.arrayApproversFullArray=self.dm.responseArray


            if(self.dm.responseArray.count>0 && self.dm.responseArray != nil)
            {
                let obj=self.dm.responseArray[0] as! [String:Any]
                print("object approver------\(obj)")

                if let objApprover:Array<Any> = obj["Approvers"] as? Array<Any>
                {
                    if(objApprover.count>0)
                    {
                        self.dm.arrayFirstApprovers=objApprover
                        let approverInnerObj=objApprover[0] as! [String:Any]
                        print(objApprover)

                        if let strApproverCode=approverInnerObj["EmployeeCode"] as? Int
                        {
                            self.dm.strApproverCode=String(strApproverCode)

                        }

                        if let strApproverNAme=approverInnerObj["Name"] as? String
                        {
                            self.btnFirstApprover.setTitle(strApproverNAme, for: .normal)
                            self.dm.strApproverNAme=strApproverNAme
                        }

                        print("Approvers are more than 1")

                        callback(true)
                    }

                    else
                    {
                        callback(false)
                    }
                }



               callback(false)

            }

            else{
                callback(false)
            }




        }
        else
        {


            print(self.dm.errorMessage)
            self.com.showAlertMessage()
            callback(false)
        }
    }

}

【问题讨论】:

    标签: ios swift3 block completionhandler


    【解决方案1】:

    是的,必须在主线程上进行 GUI 更改。

        DispatchQueue.main.async {
            self.actIndApprover.stopAnimating()
        }
    

    通常 Xcode 会在控制台输出中给出警告。

    【讨论】:

    • 我确实喜欢这个,似乎它多次调用。有什么理由吗?
    • 这个调度块运行了多次
    • 我不知道您的代码或电话。这不是 Dispatch 本身,而是你的实现被多次调用
    • 我刚才想了想,当初始时,活动指示器正确消失了,但是当我单击相同的 btn 时,下次它不会出现
    • 你添加了一些断点?然后你可以看到谁在调用你的完成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多