我的应用有时会在拨打textView.becomeFirstResponder()
时崩溃。抛出的错误很奇怪:
-[UITextSelectionView keyboardShownWithNotif:]: unrecognized selector sent to instance 0x16899070
有时它是:
-[UIImageView keyboardShownWithNotif:]: unrecognized selector sent to instance 0x178e2610
我确实添加了通知监听器:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardShown(notif:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardHidden), name: .UIKeyboardWillHide, object: nil)
但观察者是我定义的自定义视图,为什么系统会向UITextSelectionView
或UIImageView
发送通知?
在iOS 8.4.1中找到,未在iOS 9中重现。
这里发生了什么?
答案 0 :(得分:2)
seems like you added an notif. observer to show/hide keyboard.
Try to remove observer in dealloc method
- (void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]; //Or whichever observer you want to remove
}
答案 1 :(得分:0)
在swift 3中:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: self.view.window)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: self.view.window)
}
或
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: self.view.window)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: self.view.window)
}