обновить представление таблицы при получении уведомления - PullRequest
0 голосов
/ 12 февраля 2019

У меня очень маленький чат в моем приложении.всякий раз, когда пользователь получает сообщение, сервер отправляет уведомление.В appDelegate я реализовал код ниже:

@available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler(.alert)
//        print(UNNotificationAction)
        print("??? recieved")
        if notification.request.content.title.contains("Message")
        {
            print("sub")
            print(notification.request.content.subtitle)
            print("body")
            print(notification.request.content.body)
            print("it containt DM ⏰")

            let storyboard:UIStoryboard = UIStoryboard(name:"Chat", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "chatRoomVc") as! ChatRoomViewController
            vc.becomeFirstResponder()

            vc.setRefreshListener {
                print("triggered")
            }

        }

    }

и всякий раз, когда он запускается, он вызывает API и получает данные чата.код ниже показывает, как он получает данные:

 func setRefreshListener(listener:@escaping ()->Void){
    refreshListener = listener
    presenter.getttingChatRoomData(aptId: UserDefaults.standard.string(forKey: userAPTID)!, id: UserDefaults.standard.string(forKey: userID)!)
    presenter.attachView(view: self)
    super.loadView()
    super.reloadInputViews()
    tableView.reloadData()


}

Кроме того, я могу получить данные правильно.

ПРОБЛЕМА, это не перезагружает данные для представления таблицы !!

есть ли у кого-нибудь решение, почему это происходит?

ОБНОВЛЕНИЕ: приведенный ниже код запускается при получении данных:

 func gettingUserChatWithSUCCESS(responce: [chatRomModel]) {
        print("✅ getting chat room data SUCCESS")
        data = responce
        tableView.reloadData()
    }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Реализуйте метод UNUserNotificationCenterDelegate и опубликуйте ваше уведомление.

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {

    let userInfo = response.notification.request.content.userInfo
    if UIApplication.shared.applicationState == .background || UIApplication.shared.applicationState == .inactive {
                NotificationCenter.default.post(name: .newMessage, object: nil, userInfo:userInfo)
     }

}

В вашем контроллере представления добавьте наблюдателя для проверки уведомлений (Добавьте свой собственный метод выбора.)

  NotificationCenter.default.addObserver(self,
                                        selector: #selector(updateMessages(notification:)),
                                        name: .newMessage,
                                        object: nil)



    @objc func updateMessages(notification: NSNotification) {
     // Handle your notifications...
   }
0 голосов
/ 12 февраля 2019

Вы можете решить эту проблему с помощью наблюдателя уведомлений, например, следуйте этому коду.

Добавьте наблюдателя уведомлений в ваш viewcontroller

NotificationCenter.default.addObserver(self, selector: #selector(onReceiveData(_:)), name: "ReceiveData", object: nil)

@objc func onReceiveData(_ notification:Notification) {
    // Do something now //reload tableview
}

обозреватель вызовов, используя этот код в вашем файле appDelegate.swift receiveметод уведомления

NotificationCenter.default.post(name: Notification.Name("ReceiveData"), object: nil)

Примечание: - Удалите наблюдателя уведомлений, когда ваш viewcontrller исчезнет, ​​используя этот код

override func viewWillDisappear(_ animated: Bool) {
      super.viewWillDisappear(animated)
      NotificationCenter.default.removeObserver(self, name: "ReceiveData", object: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...