我正在将一个视图控制器添加为监听UIKeyboardWillShowNotification
通知的观察者。
我在我的viewDidLoad
中有这段代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
在我的dealloc
方法中:
[[NSNotificationCenter defaultCenter] removeObserver:self];
即使在关闭视图控制器时调用
dealloc
,观察者也没有被移除。因此,当我第二次打开它时,NSNotificationCenter将尝试通知已释放的旧对象,导致应用程序崩溃。我在StackOverflow上看到了几个关于这个特定问题的问题,但是没有一个答案适用于我。
我尝试在
viewWillDisappear
和viewDidDisappear
中删除观察者,但是仍然出现相同的问题。我正在使用ARC。
dealloc
是完全正确的做法,只是在实现中不能调用[super dealloc]
。 - Gabriele PetronellaBOOL isFirstTime;
来解决这个问题,在keyboardWillShow
和- (void)keyboardDidHide
时设置为 YES。{ if(!isFirstTime) return;, , , , , , isTxtFieldKeyBoard = NO; isFirstTime = NO;
} - iPatel