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

結論としては断念したので、試行錯誤メモです。

===

課題

すべての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
とあるように、オーバーライド可能なメソッド。
しかし、関数名の通り「Controllerが表示されるごと」ではなく、「SubViewが表示されるごと」に呼ばれるので、とても鬱陶しい。

===

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

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中