2013-10-03 1 views
0

У меня есть ARC включен проектКак удалить наблюдатель

Там находятся несколько наблюдателей добавлены в viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getSipNotification:) name:@"getSipNotification" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(syncExtensionData:) name:@"syncExtensionData" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLocalNotification:) name:@"showLocalNotification" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outgoingCall:) name:@"outgoingCall" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playRingtone) name:@"playRingtone" object:nil]; 

Я хочу, чтобы удалить все наблюдатели, так что я добавил следующую строку в viewDidUnload

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

Теперь мой вопрос в том, что удалить всех наблюдателей?

Если нет, то как это сделать?

UPDATE

Если я хочу, чтобы удалить один наблюдатель, как можно это сделать?

Помогите пожалуйста.

+0

Да удалить все наблюдатели :) –

+0

Пожалуйста, обратите внимание, что viewDidUnload: не является правильным местом для удаления наблюдателя в большинстве случаев. Скорее всего, вы должны сделать это в dealloc, viewDidDissapear или что-то еще. – wirrwarr

ответ

2

Да, он удалит всех наблюдателей.

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

И вы можете удалить конкретный наблюдатель, как это ...

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"syncExtensionData" object:nil]; 
1

Да удалит все наблюдатель в своем классе.

Вы можете использовать следующие для удаления одного наблюдателя:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"getSipNotification" object:nil]; 

Для удаления отдельного наблюдателя.

2

В моем приложении я использовал это уведомление:

для конкретного наблюдателя удалить таким образом:

-(void)viewWillAppear:(BOOL)animated 
{ 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotatedFeedBackView:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

} 
-(void)deviceRotatedFeedBackView:(NSNotification*)notification 
{ 
    //right whetever you want 
} 
- (void)viewWillDisappear:(BOOL)animated 
{ 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; 
} 

может быть, это будет полезно для вас.

0

viewDidUnload устарел в iOS6 и позже, поэтому ваш наблюдатель никогда не будет удален из центра уведомлений в iOS6 и позже. Для удаления одного наблюдателя попробовать

 - (void)removeObserver:(id)notificationObserver name:(NSString *)notificationName object:(id)notificationSender

 Смежные вопросы

  • Нет связанных вопросов^_^