NSNotification.Name.UIKeyboardWillShow崩溃 - 无法找到原因

问题描述 投票:1回答:1

我的应用程序的用户报告了随机崩溃。我已经集成了CrashAnalytics,它提供了以下详细信息:

__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20. 

enter image description here

显示的行号为154,即:

self.notesView.content.frame = CGRect(x: self.notesView.content.frame.origin.x, y: self.notesView.content.frame.origin.y, width: self.notesView.content.frame.size.width, height: self.notesView.content.frame.size.height - keyboardFrame.size.height). 

以下是我写的代码,包括这一行:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        label_title.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardShown), name:NSNotification.Name.UIKeyboardWillShow, object: nil);
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardHide), name:NSNotification.Name.UIKeyboardWillHide, object: nil);
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        label_title.removeObserver(self, forKeyPath: "contentSize")
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    }

    func keyboardShown(notification: NSNotification) {
        let info = notification.userInfo!
        let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
        self.notesView.content.frame = CGRect(x: self.notesView.content.frame.origin.x, y: self.notesView.content.frame.origin.y, width: self.notesView.content.frame.size.width, height: self.notesView.content.frame.size.height - keyboardFrame.size.height)
    }

首先,这是随机的,我从来没有得到它。其次,我无法找到确切的原因。这是因为通知观察者还是因为notesView(不是nil)。 正如here建议的那样,我应该删除deinit中的键盘通知观察者吗? 如果有人以前经历过这个,请指导我。

ios swift nsnotificationcenter crashlytics
1个回答
2
投票

将功能的签名更改为此

@objc func keyboardShown(_ notification: Notification)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.