Почему метод делегата не вызывается? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь уведомить ChatViewController о том, что чат был удален в MessagesViewController с использованием протокола, но метод делегата, реализованный в ChatViewController, никогда не вызывается.
В иерархии navigationController ChatViewController находится поверх MessagesViewController.

protocol MessagesViewControllerDelegate:class {
  func chatWasDeletedFromDatabase(chatUID: String)
}

class MessagesViewController: UITableViewController {
    weak var delegate: MessagesViewControllerDelegate?

  func observeChatRemoved() {
    print("it is gonna be called")
           //inform ChatViewController that a chat was deleted.
   self.delegate?.chatWasDeletedFromDatabase(chatUID: chat.chatUID)
    print("was called here") //prints as expected
  }
}


  class ChatViewController: JSQMessagesViewController {

     var messagesVC: MessagesViewController? 

    override func viewDidLoad() {
      super.viewDidLoad()

     messagesVC = storyboard?.instantiateViewController(withIdentifier: "MessagesViewController") as! MessagesViewController
     messagesVC?.delegate = self
   }
 }


    extension ChatViewController: MessagesViewControllerDelegate {
    func chatWasDeletedFromDatabase(chatUID: String) {
    print("chatWasDeletedFromDatabase called") //never prints out
      if self.chatSelected.chatUID == chatUID {
         //popToRootViewController
       }

 }

1 Ответ

0 голосов
/ 05 октября 2018

Кажется,

weak var delegate: MessagesViewControllerDelegate?

- это nil Вы должны установить его на ChatViewController представленный экземпляр, что бы вы ни представляли,

let chat = ///
self.delegate = chat
self.navigationController?.pushViewController(chat,animated:true)

Также сделайте

chat.messagesVC = self

, так как

 messagesVC = storyboard?.instantiateViewController(withIdentifier: "MessagesViewController") as! MessagesViewController
 messagesVC?.delegate = self

не является представленным в данный момент сообщением, поэтому прокомментируйте 2 строки выше

...