最近はSwift書いたりPython書いたりしてます。
Scalaも書きたい。勉強だけはしてます。
結構つまらない所でしばらく引っかかったので書いておきます。
環境
Selectorで呼び出すメソッドに引数をつけるとrun-time error?
このようなコードで、キーボードの出現を取得しようとしましたが、ランタイムエラーになってしまいました。
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWasShown"), name: UIKeyboardWillShowNotification, object: nil)
}
func keyboardWasShown(sender: NSNotification){
doSomething();
}
こんな感じのエラー。
libc++abi.dylib: terminating with uncaught exception of type NSException
原因がわからなくて、試しにSelectorの受け側の引数を以下のようになくすと何事も無く動きました。
func keyboardWasShown(){
doSomething();
}
これで動かしてもよかったんですけど、今回はキーボードのサイズを取得したかったので、引数を取得できないのは都合悪いんですよね・・。
何が悪いんだろうな―ってずっと悩んでいたんですけど、Selectorの指定が悪かったようです。
以下のようにメソッド名の最後に":"をつけると正常に動きました。
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWasShown:"), name: UIKeyboardWillShowNotification, object: nil)
}
func keyboardWasShown(sender: NSNotification){
doSomething();
}
重要なのは
Selector("keyboardWasShown:")
ここです。
この最後のコロンがないだけで動きませんでした。一文字に悩まされるのはいい気分じゃないですね。