すべてのcontrollerに処理を追加
この記事はWordPressの投稿を文字だけ転記したものです 画像付きの完全版の記事は下記ページです [ http://ift.tt/2qyHDqK]
結論としては断念したので、試行錯誤メモです。
課題
すべてのcontrollerに処理を追加したい。 例えば、Controller表示前にログを出したい、とか。 (私は、viewWillAppear前にFirebaseの値を確認したかった。)
方法
UIViewControllerをカテゴリ拡張してメソッドをオーバーライドする
UIViewController+Addition.m (ファイル名に+、初めて使った)
@implementation UIViewController (Addition)
-(void)viewWillAppear:(BOOL)animated{ // なんやかんや }
-(void)viewDidLayoutSubviews{ // なんやかんや }
// ※ 参考 : UIViewControllerのライフサイクル
調査
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 とあるように、オーバーライド可能なメソッド。 しかし、関数名の通り「Controllerが表示されるごと」ではなく、「SubViewが表示されるごと」に呼ばれるので、とても鬱陶しい。
というわけで、今回は毎回処理を追加することは諦めて、アプリ起動時のみ、処理を入れるように仕様の方を変更しました。