为什么不调用委托方法?
Why delegate method is not called?
我正在尝试通知 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
}
}
好像
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
不是当前显示的 messagesVC ,所以注释上面两行
我正在尝试通知 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
}
}
好像
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
不是当前显示的 messagesVC ,所以注释上面两行