观察者永远不会从NSNotificationCenter中删除

Hes*_*gid 5 nsnotificationcenter ios

我正在添加一个视图控制器作为UIKeyboardWillShowNotification通知的观察者.

我的代码在我的viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWillShow:)
                                         name:UIKeyboardWillShowNotification
                                       object:nil];
Run Code Online (Sandbox Code Playgroud)

在我的dealloc:

[[NSNotificationCenter defaultCenter] removeObserver:self];
Run Code Online (Sandbox Code Playgroud)

即使dealloc在视图控制器关闭时调用,也不会删除观察者.因此,当我第二次打开它时,NSNotificationCenter将尝试通知已发布的旧对象,并且应用程序崩溃.

我在StackOverflow上看到了关于这个特殊问题的几个问题,但没有答案对我有用.

我试过删除观察者viewWillDisappear,viewDidDisappear但同样的问题发生了.

我正在使用ARC.

Seg*_*gev 1

您是否在 中尝试过这段代码viewWillDisappear

- (void)viewWillDisappear:(BOOL)animated 
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
Run Code Online (Sandbox Code Playgroud)

从你的解释来看,我认为问题不在于移除观察者。尝试从另一个视图控制器触发观察者。如果没有触发,您就会知道删除成功,并且当您第二次添加观察者时会出现问题。