はじめに
NotificationCenterを使用したオブザーバパターンでのイベント通知を実装したのにオブザーバに設定したメソッドが呼ばれない!そんな時にまず確認したいことを記事にしました。
環境
・Swift 5.5.2
・Xcode 13.3.1
やること
個人開発では全てのコードを自分が書いており、どこに何を書いてるかをある程度把握できていると思うのでこのようなことが起こる確率は低いと思いますが、チーム開発などでいろんな人がコードを書き込んでいるプロジェクトでは比較的起こりやすいのかな思いました。僕は起こりました。
確認事項
・command + Fで検索ウインドウを開きremoveObserver
を検索してみる
NotificationCenter.default.removeObserver(self)
<- 解除処理
数十分ほど悩んでいたところ、まさかなと思いながら検索するとそのまさかでした。
通知を登録した直後に登録を解除されておりメソッドが呼ばれないということが起きてました。
ちなみに、iOS 9.0・macOS 10.11以降では解除処理が必須ではなくなりました。
https://developer.apple.com/documentation/foundation/nsnotificationcenter/1415360-addobserver
もし同じ現象に陥った方は是非試してみてください。