0
ブロックが完了したらアクティビティインジケータを削除します。だから私はこのようなことをしました。完了ハンドラ内でUIActivityIndicatorをすばやく削除する3
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)
}
}
}
しかし、このアクティビティインジケータは削除されません。メインスレッドで削除する必要がありますか?もしそうなら、どうすればいいのですか?私を助けてください。 おかげ
UPDATE
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)
}
}
}
私はこれを好きでした。その理由は何ですか? – user1960169
このディスパッチブロックは複数回実行されています – user1960169
あなたのコードや呼び出しがわかりません。それはディスパッチそのものではなく、あなたの実装は複数回呼び出されました – Matz