SwiftでNSNotificationCenterのaddObserverで、セレクタを指定するとエラーになるのを対処する。

Swiftで、iOSアプリを開発しています。
すらすら書けるようになると気持ちいいですし、Objective-Cと比較してコードの量が減ったので開発スピードも少しはアップしている気がします。
そこそこ込み入ったアプリを作っていくと、ノウハウも溜まってくるんじゃないかと考えています。

さっきも何だか上手くいかなかったことがありました。

NSNotificationCenterのaddObserverで通知を受けようとするとUnrecognized selector sent to instanceとエラーが出てセレクタが見つからないと言われアプリが止まってしまうのです。

Swiftになってからは、Objective-Cでは@selecter(セレクタ名)で指定していたセレクタは、ただの文字列として指定することになっていて、(内部的にはstructになっているようですが。)これを素直に指定しているとアプリがエラーになってしまいました。

Unrecognize selector
これは、addObserverForNameなら問題ないのであまり重要視していませんでした。
しかし、やっぱり気持ち悪いので色々と調べていくと解決方法が分かりました。

まず、メソッドをprivateにするのをやめることで、解決できます。
状況によってはエラーが出ないのは何でだろうと考えて、まずprivateがマズイのではないかというところに辿りつきました。
privateにすることで他のファイルのオブジェクトからは見えなくなるという現象であるという理解をしました。
しかし、これは完璧な対応策とは言えません。
やはり、公開するメソッドは最小限にとどめて他は、隠蔽しておきたいものですしね。

他にも方法があるんじゃないかと、ググってみるとありました。
NSNotificationCenterは、Objective-CのオブジェクトでSwift化されていないのかよくわかりませんが、@objcの指定子をつけてメソッドを見えるようにする必要があるようです。

納得のいく内容だったので、それを反映すると無事コードが実行されました。

これからも更新を続けていきますので、Feedlyへの登録をお願いします!

follow us in feedly

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です