Help us understand the problem. What is going on with this article?

segueを使うときの注意点

segueは下手すると二回実行される

画面遷移時に値渡しをするのにsegueを使って処理を書くこともあると思いますが、
やり方によっては2回処理がされるため注意が必要です。

普通に動いているように見えますが、デバックしてみるとこんな感じになってます。

qiita.rb
@IBAction func toBlackButton(_ sender: UIButton) {
    performSegue(withIdentifier: "toBlack", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let nextView = segue.destination as! BlackViewController
    print("呼び出された!")
}

スクリーンショット 2019-09-11 21.28.09.png

そんなに呼び出さんでもええんやで・・・。と言いたいが。

原因としては
スクリーンショット 2019-09-11 21.29.45.png

ボタンから直接Controllerを呼び出していたことで、ボタンが押された時にsegueも呼び出されて2回呼び出されるって仕組み(あってるかはわからんけど)

んで対策としては

スクリーンショット 2019-09-11 21.30.48.png

ControllerからControllerへ渡すようにしてあげれば、
Controller内で呼び出されたsegueが起動するだけなので1回での呼び出しになるって感じです。

値を次の画面の配列に入れるって動作をしてたらなぜか2ついっぺんに入るんで判明。

気をつけていきましょう。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away