非同期に実行されるブロック/クロージャー内で、そのブロック内で何かを実行する前に、現在の状態をチェックしたいと考えています。ブロック/クロージャー完了後の現在のビュー状態の確認
これは、NSURLsession要求の後に次のView Controllerにセグメンテーションする共通の例です。
ここでは例です:
@IBAction func tappedButton(sender: UIButton) {
//This closure named fetchHistorical goes to the internet and fetches an array
//The response is then sent to the next view controller along with a segue
Order.fetchHistorical(orderID, completionHandler: { (resultEnum) ->() in
switch resultEnum {
case .Success(let result):
let orderItemsArray = result.orderItems!.allObjects
self.performSegueWithIdentifier("showExchanges", sender: orderItemsArray)
default:
let _ = errorModal(title: "Error", message: "Failed!")
}
})
}
は、ユーザーがせっかちされていると仮定して、このボタンを3回タップ。
これは、この関数が3回呼び出され、次のビューコントローラーに分割しようとするたびに表示されることを意味します(警告:このビューはウィンドウ階層に表示されません! ")
私はこの問題にどのように対処していますか?それは閉鎖内のようなものですか?あなたが現在のviewcontrollerにまだいるかどうかを確認してください。そうであれば、segueingが有効です。もしそうでなければ、すでにセグエフしており、セグエを再度実行しないでしょう。
***クロージャが非同期に実行されるため、より一般的に、クロージャ内の現在の状態を確認していますか?