3

在 Xcode 8 中出现分段错误

我最近将我的项目迁移到Swift 3。Xcode 版本8.0 (8A218a) 每当我使用 UIKeyboardWillShow 通知时都会收到此错误:

由于信号导致命令失败:分段错误:11`

这就是我在代码中使用通知的方式:

override func viewWillAppear(_ animated: Bool) {
    NotificationCenter.default.removeObserver(NSNotification.Name.UIKeyboardWillShow)
    NotificationCenter.default.removeObserver(NSNotification.Name.UIKeyboardWillHide)
    NotificationCenter.default.addObserver(self, selector: #selector(myViewController.keyboardWillShow(_:)), name:NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(myViewController.keyboardWillHide(_:)), name:NSNotification.Name.UIKeyboardWillHide, object: nil)

}


func keyboardWillShow(_ sender: Notification) {
     //keyboardWillShow Method
}

func keyboardWillHide(_ sender: Notification) {
    // keyboardWillHide Method
}

当我注释掉 viewWillAppear 方法中的代码时,项目运行成功。

4

2 回答 2

5

主题:分段错误:11,这是 Xcode8/Swift3 的错误,您应该发送错误报告

关于您的代码:

NotificationCenter.default.removeObserver(NSNotification.Name.UIKeyboardWillShow)
NotificationCenter.default.removeObserver(NSNotification.Name.UIKeyboardWillHide)

没有任何方法可以删除仅指定其名称的观察者。您需要为removeObserver(_:).

我不确定这是你想要的,但你可以使用removeObserver(_:name:object:)这样的方法:

NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)

我相信这不会让你的 Xcode 崩溃。

于 2016-09-10T14:01:15.687 回答
0

我在相同的条件和环境(Swift 3,Xcode 8)中遇到了同样的问题,要解决这个问题,你应该提出:

NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)

代替:

NotificationCenter.default.removeObserver(NSNotification.Name.UIKeyboardWillShow)
NotificationCenter.default.removeObserver(NSNotification.Name.UIKeyboardWillHide)
于 2016-10-13T08:55:33.850 回答