productViewControllerDidFinishはiOS13で挙動がちょっと違う。

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
  viewController.dismiss(animated: true, completion: nil)
}
というメソッドはiOS13で挙動がすこし変わっていた。上の書き方が一般的でこの書き方をしていれば問題ないと思われる。animatedやcompletionは状況に応じた値にすればいい。

ただ、次のような状況で別の記述になっていたらiOS13でおかしくなった。
dismissを「(自分の上に)表示しているViewControllerを消す」という意味ととらえた場合、つまりdismissを実行したViewControllerが消えるのではなく、子ViewControllerが消えるという解釈をした場合、
AがBを表示している状況で、Aがdelegateになっていれば、Bを消すときに
func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
  dismiss(animated: true, completion: nil)
}
という書き方になる。
しかしこの書き方ではiOS13ではA自身も消えてしまう。
dismissは子を消すという解釈は間違っていない気がするが。
dismissの挙動で何か情報を知っている人は教えていただきたい。dismissは自分が閉じるのか子が閉じるのか。

コメント

このブログの人気の投稿

Swiftのコンパイルエラー寄せ集め

コンパイルエラー覚え書き(Objective-C)

AVAudioSession細かいことまとめ(late 2014)