Ошибка при обработке уведомления пользователя о наборе текста с использованием notificatincenter - PullRequest
0 голосов
/ 08 сентября 2018

Я создаю приложение чата с использованием socket.io, все идет отлично, но когда я обрабатываю уведомление о наборе пользователя, я получаю сообщение об ошибке, как показано ниже

Ошибка:

Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [SocketChat.ChatViewController handleUserTypingNotification:]: нераспознанный селектор, отправленный экземпляру 0x7f817653d710

и сейчас я покажу вам мой код для лучшего истечения

Код:

private func listenForOtherMessages() {
    socket.on("userTypingUpdate") { (dataArray, socketAck) -> Void in
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "userTypingNotification"), object: dataArray[0] as? [String: AnyObject])}
}

Здесь я управляю методом, который я получаю из файла index.js и из другого viewcontroller. Я управляю с центром уведомлений как ниже

let notificationCenter4 = NotificationCenter.default
        notificationCenter4.addObserver(self, selector: Selector(("handleUserTypingNotification")), name:NSNotification.Name(rawValue: "userTypingNotification"), object: nil)

Я не понимаю, почему возникает эта ошибка и что именно она означает. Может кто-нибудь, пожалуйста, помогите мне?

import UIKit

class ChatViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let notificationCenter4 = NotificationCenter.default
        notificationCenter4.addObserver(self, selector: #selector(handleUserTypingNotification)), name:NSNotification.Name(rawValue: "userTypingNotification"), object: nil)
    }

    func handleKeyboardDidShowNotification(notification: NSNotification) {
        if let userInfo = notification.userInfo {
            if let keyboardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
                conBottomEditor.constant = keyboardFrame.size.height
                view.layoutIfNeeded()
            }
        }
    }

}

1 Ответ

0 голосов
/ 08 сентября 2018

Ваша подпись селектора неверна. Это должно выглядеть так.

let notificationCenter4 = NotificationCenter.default
notificationCenter4.addObserver(self, selector: #selector(handleKeyboardDidShowNotification(notification:)), name:NSNotification.Name(rawValue: "userTypingNotification"), object: nil)

В своем коде вы создаете новый экземпляр, хотя у вас, вероятно, уже есть селектор. Как то так.

@objc func handleKeyboardDidShowNotification(notification: NSNotification) {
    if let userInfo = notification.userInfo {
        if let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            conBottomEditor.constant = keyboardFrame.size.height
            view.layoutIfNeeded()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...