【发布时间】:2014-10-22 05:28:00
【问题描述】:
我有一个应用程序在我尝试处理键盘通知时崩溃。我正在使用 xCode 6.0,该项目在 Swift 中。
为了解决这个问题,我创建了一个新应用,它只包含一个 UITextView 和 4 个约束,这些约束将视图固定到顶部、左右边缘并设置固定高度。
我的ViewController 拥有以下内容:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.observeKeyboard()
}
override func viewDidDisappear(animated: Bool) {
NSNotificationCenter().removeObserver(self)
}
func observeKeyboard() {
NSNotificationCenter.defaultCenter().addObserver(self, selector:Selector(keyboardWillAppear()), name:UIKeyboardWillChangeFrameNotification, object:nil)
}
func keyboardWillAppear() {
println("keyboardWillAppear")
}
}
当我在模拟器中启动应用程序时,
keyboardWillAppear
打印到控制台,当我在文本视图中点击时,应用程序崩溃:
EXC_BAD_ACCESS code=1:
错误:memory read failed for 0x0
显示键盘,但另一个keyBoardWillAppear 未打印到控制台。
这个应用程序中没有其他内容,只有上面的代码和 4 个约束。我刚刚打开了一个全新的项目,试图找出我在其他应用程序中遇到的问题。我也尝试订阅viewDidAppear中的通知,我也尝试使用另一个通知UIKeyboardWillShowNotification和UIKeyboardDidShowNotification,但结果总是一样。
我错过了什么?感谢您的帮助!
【问题讨论】:
-
能否分享一下您尝试过的示例项目?
-
你的第一个问题是 UIKeyboardWillChangeFrameNotification 应该是 UIKeyboardWillShowNotification。
-
谢谢 Anil 和@DBoyer。我尝试了两种通知(甚至更多与键盘相关的通知)。但我的实际问题是“addObserver”中选择器的错误使用。它接受一个参数,所以应该是 selector:"keyboardWillAppear:" 而不是我在问题中使用的。