shouldPerformSegueWithIdentifier は曲者だ。

ようやくアプリをリリースできたんだけど、、、

Direction of Your Destination

Direction of Your Destination

  • Satoshi TANAKA
  • Lifestyle
  • Free

apps.apple.com

指摘された部分を改修してたらバグを見つけてしまい、解決できなくて困ったなぁ。とりあえず、見つけたバグは指摘されていないので、指摘された部分だけ改修して再提出してみた。今回担当 refree 運がよかった。バグに気付いていない。審査通過してリリースと相成った。

その後、ようやく見つけたバグを改修できて、v1.0 が Ready for Sale になって、すぐに v1.1 を審査してもらうという、refree さん、手間かけちゃってごめんね。

バグっていたのは状況が複雑で・・・

位置情報の許可を与えていない場合、plus ボタンを機能しないようにする。ここは OK。次に、位置情報の許可を与えたら、plus ボタンを機能するようにする、というところがうまくいかない。初めから許可を与えた状態でアプリを起動すれば問題ないのだけれど、許可を与えていない状態で起動し、アプリを起動したまま許可を与えた場合がうまくいかないのだ。具体的には、Container View が load できなくて実態が作られなくなり、実態がないので hidden = NO が効かない。

いろいろ調べてようやくわかったのが、Container View を segue 接続してると shouldPerformSegueWithIdentifier が呼ばれる。ここで、retun NO をしてしまうと Container View の準備が済まず、結果、load されない、実態がない、という状態になってしまう。

また、この method の中で UIAlertViewController を呼ぶと return YES としていても、prepareForSegue に遷移しなくなる。これを知っていると、実は便利なこともあって、位置情報の許可が得られていない、アラート出す、segue の遷移はしなくてよい、という実装がすごく便利。要は、shouldPerformSegueWithIdentifier の戻り値は YES なんだけど、prepareForSegue に遷移しない、ということができてしまうと。本質的には、Container View の load を阻害しなくてよかったんだけど、後で code 見たら悩むだろうなぁ。忘れないように source に書いておこう。