浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Swift】KVO(Key-Value Observing)を触ってみた

昔他の人が開発したiOSアプリを修正していたのですが、現行の環境で実行したところエラーが発生しました。
で、エラー発生個所が KVO の処理のところだったので、修正もかねてちょっと触ってみました。
ちなみに、エラー修正前のアプリは、実行した直後に落ちました。

KVO について参考にさせていただいた記事はこちら。

Swift4のKVOに感動した。 – Qiita
https://qiita.com/ObuchiYuki/items/d00ce5f44725672184da

なお、KVO とは、オブジェクトの値の変更の監視をしてくれる Swift の機能です。

 

コードの修正ですが、下記の場所を修正しました。

func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutableRawPointer) {
    // 実行したい処理
}

こちらは、監視しているオブジェクトの値が変更されたら呼び出される関数なのですが、override しているわけではなかったので、これが怪しいのでは…?と思ったんですよね。
実際、KVO の処理をまるっとコメントアウトしてみたら、アプリは落ちることもなく動作したので、怪しいのはこのあたりのはず。

で、こちらを下記のように書き直しました。

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    // 実行したい処理
}

念のため、Xcode の関数補完機能を使ったので、問題はないはず。
若干、ここ以外にもコードの修正は必要でしたが、こちらを修正したところ、アプリが落ちることなく、問題なく実行できました。

とりあえず動くようにはなったので、今後は、時間があれば実際にここの処理が具体的に何をしているのかをみてみたいと思います。

 

以上、Swift の KVO 機能を修正してみた、でした。
参考になれば嬉しいです。

  • この記事いいね! (0)