2016-07-11 4 views
0

NSNotification Observerは、特定のビューコントローラまたはビューコントローラだけではありません。ユーザーがアプリを閉じるときにのみ削除します。 AppDelegateに「オブザーバを追加」しました。手動で削除する必要がありますか?またはアプリが終了したときに自動的に削除されますか?アプリ全体のライフタイムにオブザーバーが存在するようにするには、手動でオブザーバーを削除する必要がありますか?

またはあなたがここにオブザーバーを削除CAL:アプリはすなわち

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    // Called when the application is about to terminate. Save data if appropriate. 
} 

は、あなたがオブザーバーを削除することができ、メソッドの呼び出しを終了している

+0

あなたは 'didFinishLaunchingWithOptions'にオブザーバーを追加していますか? – Vvk

+0

@Vvkはいそれを追加しました – den330

+0

あなたはAppDelegateの 'applicationWillTerminate'メソッドでオブザーバーを削除する必要があります – Vvk

答えて

2

特定のビューコントローラに通知する場合は、add observerをその特定のクラスに追加し、remove observerviewDidDisappearに追加してください。あなたのケースを見ましたが、add observerapp delegateに追加しました。あなたの要件に応じて以下の方法で削除できます。私は、あなたが

deinit{ 
    //remove observer here 
} 

でコードを書くべきだと思う

- (void)applicationWillResignActive:(UIApplication *)application 
- (void)applicationDidEnterBackground:(UIApplication *)application 
- (void)applicationWillTerminate:(UIApplication *)application 
1

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

} 

アプリケーションが入ってきますバックグラウンド。

1

はAppdelegateクラスのメソッドの上に追加します。

希望すると、これが役立ちます。おかげ

1

はあなたがapplicationWillTerminateでオブザーバを削除didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(<#your selector#>) 
               name:@"TestNotification" 
               object:nil]; 

    return YES; 
} 

にaddobserverする必要があり、この

を試してみてください。何度もアプリがバックグラウンドになり、常にdidFinishLaunchingWithOptionsを呼び出さないので、他の方法でオブザーバを削除する必要はありません。あなたはapplicationWillTerminateの中でのみ削除する必要があります。

- (void)applicationWillTerminate:(UIApplication *)application { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 

    // If you don't remove yourself as an observer, the Notification Center 
    // will continue to try and send notification objects to the deallocated 
    // object. 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

希望すると助かります。

関連する問題