2016-07-11 11 views
0

My NSNotification Observer предназначен не только для определенного контроллера вида или просмотра. Я хочу, чтобы он удалялся только тогда, когда пользователи закрывали приложение. Я добавил «добавить наблюдателя» в AppDelegate. Должен ли я все же удалить его вручную, или автоматически удаляется, когда приложение закрыто?Нужно ли удалять наблюдателя вручную, если я хочу, чтобы он был там в течение всего срока службы приложения?

+0

Вы добавляете наблюдателя в 'didFinishLaunchingWithOptions'? – Vvk

+0

@Vvk Да, я добавил его там – den330

+0

вам нужно удалить наблюдателя в 'applicationWillTerminate' метод в AppDelegate – Vvk

ответ

2

Если вы хотите получать уведомления для определенного контроллера вида, пожалуйста, добавьте add observer к этим конкретным классам и remove observer в viewDidDisappear. Эй видел ваш случай, прямо сейчас вы добавили add observer в app delegate, тогда вы можете удалить его ниже, в соответствии с вашими требованиями.

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

Когда приложение прекращает то вызов метода т.е.

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

вы можете удалить наблюдателя:

или кал удалить наблюдателя здесь:

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

} 

Когда приложение приходят задний план.

1

Я думаю, вы должны написать свой код в

deinit{ 
    //remove observer here 
} 

Добавить выше метода в классе AppDelegate.

Надеюсь, это вам поможет. Благодаря

1

Попробуйте

вы должны addobserver в 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; 
} 

затем удалить наблюдателя в applicationWillTerminate. вам не нужно удалять наблюдателя в других методах, потому что много раз приложение подходит к фону и не звонит 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]; 
} 

надеюсь, что это вам поможет.