読者です 読者をやめる 読者になる 読者になる
20代 / 独身 / 会社員

すべてのcontrollerに処理を追加

f:id:KUROGOMA:20170519093109p:plain この記事は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が表示されるごと」に呼ばれるので、とても鬱陶しい。


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

from WordPress http://ift.tt/2rxirhz