[iOS] すべてのcontrollerに処理を追加

iOS
スポンサーリンク

試行錯誤メモです。
動くことには動きますが、動作の保証は一切できません

=====

スポンサーリンク

課題 すべてのcontrollerに処理を追加したい。 例えば、Controller表示前にログを出したい、とか。 (今回は、すべてのviewWillAppearの前に、毎回Firebaseの値を確認したかった。) 方法 UIViewControllerをカテゴリ拡張してメソッドをオーバーライドする UIViewController+Addition.m (ファイル名に+、初めて使った) @implementation UIViewController (Addition) -(void)viewWillAppear:(BOOL)animated{ // なんやかんや } -(void)viewDidLayoutSubviews{ // なんやかんや } // ※ 参考 : [UIViewControllerのライフサイクル](http://qiita.com/motokiee/items/0ca628b4cc74c8c5599d) 調査 Warning

“category is implementing a method which will also be implemented by its primary class”

というWarningがでる。
消したい場合は下記参考。(試してない)

カテゴリで既存メソッドを拡張しようとすると表示されるwarningの対応

動作

viewWillAppear

動くことは動くが、オーバーライドすることで元の処理が呼ばれなくなってしまうため、何が起こるかわからない。
(ちょっと触った感じは普通に動いていたけれど)

viewWillLayoutSubviews / viewDidLayoutSubviews

Your view controller can override this method to make changes after the view lays out its subviews. The default implementation of this method does nothing.

※ 引用 : viewDidLayoutSubviews – UIViewController | Apple Developer Documentation

viewWillAppearと違い、
viewWillLayoutSubviews / viewDidLayoutSubviewsは、オーバーライド可能なメソッド。
しかし、関数名の通り「Controllerが表示されるごと」ではなく、「SubViewが表示されるごと」に呼ばれるので、とても鬱陶しい。

結論

できることはできる。

が、今回は毎回処理を追加することは諦めて、アプリ起動時のみ、処理を入れるように仕様の方を変更しました。

コメント