2016-10-07 6 views
0

シングルトンを作成しようとしています。AppDelegateから初期化されます。その目的は、UIViewControllers(アクティブなもの)のすべてを監視して、コンソール上に(プルーフオブコンセプトとして)クラスの種類を表示することです。だから私の基本的なアイデアは、AppDelegateでシングルトンを初期化し、パラメータとして参照番号AppDelegateを渡すことです。次に、どういうわけか、どちらがアクティブなビューであるかを監視する必要があります。iOS - AppDelegateからアプリケーションの流れを監視する

例: View A B C AはNavigation Controllerの最初のビューです。私のシングルトンは、現在のビューがAであることを認識します。次に、ビューBを押して、ビューBが現在のビューであることをSingletonに通知します。 C.と同じことが今、私たちはCとシングルトンは、現在のビューがB.

が新しいUIViewをappeard /削除されたことを私のシングルトンを通知するためのKVOまたはNSNotificationあらゆる種類であることを知っているポップ?この問題の代替案はありますか?

答えて

1

すべての通知の登録後、私は約UINavigationControllerDidShowViewControllerNotificationを見つけました。

このオブザーバでは、 [notifyCenter addObserver:self selector:@selector(viewAppeared:) name:@"UINavigationControllerDidShowViewControllerNotification" object:nil];私はUINavigationControllerのアクティビティを監視することができます。

+0

UITabBarControllerのために同じを行う方法はありますか? –

0

あなたは

@property (strong, nonatomic) UIViewController *currentViewController; 

のようにちょうどappdelegateでView Controllerオブジェクトを作ることによって、現在のビューコントローラを取得することができ、その後、ビューに現在のビューコントローラの表示されますが

のようなアプリデリゲートオブジェクトへの現在の参照を与えます
AppDelegate *myAppd = (AppDelegate*)[[UIApplication sharedApplication]delegate]; 
    myAppd.currentViewController = self; 

この方法で、現在のアクティブな表示が得られます。

0

1つの方法は、知りたい特定の方法を選択し、それを傍受することです。ここで

、私はUIViewControllerのカテゴリを作成し、私が望む方法を提供するコントローラのviewWillAppear:が正常に呼び出されることになるときに呼び出さ:その後

#include <objc/runtime.h> 

@implementation UIViewController (Swap) 

+ (void)load 
{ 
    NSLog(@"Exchange implementations"); 
    method_exchangeImplementations(
    class_getInstanceMethod(self, @selector(viewWillAppear:)), 
    class_getInstanceMethod(self, @selector(customViewWillAppear:))); 
} 

- (void)customViewWillAppear:(BOOL)animated 
{ 
    // Call the original method, using its new name 
    [self customViewWillAppear:animated]; 

    NSLog(@"Firing %@ for %@", VIEW_CONTROLLER_APPEARED, self); 
    [[NSNotificationCenter defaultCenter] postNotificationName:VIEW_CONTROLLER_APPEARED 
                 object:self]; 
} 

@end 

、それはどのようなオブジェクトに通知するためにリスニングの念です知っておく必要があります(例:シングルトン)。

+0

問題は、私がシングルトンをもっと一般的にして既存のプロジェクトで動作させたいということです。だからこそAppDelegateにパラメータを持たせたいのです。 – BlackM

+0

私はこの戦略を無効にする方法を理解していません。プロジェクトにシングルトンを追加できる場合は、プロジェクトにカテゴリを追加することもできます。 –

+0

私はそれを後の段階でフレームワークに変換します。だから私は他のコードなしでアプリケーションの流れを監視することができる場合私はそれを見つけることを試みている – BlackM

関連する問題