読者です 読者をやめる 読者になる 読者になる

【swift】prepareForSegueで特定のSegueが呼ばれたときだけ処理【CoffeeNote開発メモ】

prepareForSegue

ミスがみつかった.

新しいデータを挿入する際に,その画面のナビゲーションバーにCancelボタンとSaveボタンを設置して,それをSegueでつないで,そのデータを保存する処理をprepareForSegueで実行されるようにしていたのだけど,これってどのSegueが呼ばれても実行されてしまうメソッドだから,Cancelボタンが押されてExitしたときでも実行されてしまう.

便利だけど,まさかの落とし穴が...笑

クラスメソッドさんのこの記事にいい解決方法があったのでそれで直した.

http://dev.classmethod.jp/smartphone/iphone/ios_unwind-segue/

まさにこういうこと.

prepareForSegue:sender:もアクションメソッド複数のセグエから呼び出される可能性がありますので、どのセグエが実行されて呼び出されたのかを判別する必要があります。Unwind Segueも通常のセグエと同様にidentifierを設定することができるので、これを利用して通常のセグエ利用時と同じように切り分けることができます。

if文で呼ばれたsegueのidentifierを確認してから処理を実行する.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "unwindToAllBySave") {
        // 新規登録処理
    }
  }

と思ったらCancelボタンを押したときにエラー発生.なんだこれ.

EXC_BAD_ACCESS (code=1, address=0x0)

あきらかにif文のところがだめらしい.

もしかしたらsegue.identifierがなんらかの原因で,NULLになってるのかも,と思って確認してみた.

println(segue.identifier)

とSaveボタンの方のSegueは返ってた

なんでやろ...

と思ったらただCancelの方のSegueにidentifier設定してなかっただけだった.使わないときはNULLでよくてもsegue.identifier使うときにはNULLはおこられるらしい.

ふむふむ,うまくいった...!!!