创建新对话框时未调用委托方法
Posted
技术标签:
【中文标题】创建新对话框时未调用委托方法【英文标题】:No delegate method called when new dialog created 【发布时间】:2018-01-31 15:30:23 【问题描述】:我有一个对话框列表,当新消息发布到现有对话框时,这些对话框会按预期更新。
当有人在新对话框中向我发送新消息(即不在表格视图中的消息)时,没有任何更新。似乎没有调用任何委托方法,即使我已经输入并记录了每个 QBChatDelegate
和 QBChatServiceDelegate
方法。
我已经设置好了,所以当我转到另一个视图并返回表视图时,它会手动检索对话框并重新加载表视图。不过我需要这个自动更新。
我错过了什么?
编辑:当当前登录用户以外的其他人创建新对话框时,应该触发哪个委托方法?
编辑:更多上下文的一些代码......
在我的课堂上,我将其设置为 QBChatDelegate
和 QBChatServiceDelegate
;
QBChat.instance.addDelegate(self)
self.chatService.addDelegate(self)
然后我将当前用户登录到 QuickBlox;
self.currentUser.blobID = qbUserID
self.currentUser.login = qbUsername
self.currentUser.password = qbPassword
self.services.logIn(with: self.currentUser, completion: (success, errorMessage) in
guard success, errorMessage == nil else
self.log.error("quickblox: \(errorMessage!)")
return
self.chatService.connect(completionBlock: (error) in
guard error == nil else
self.log.error("chatService.connect: \(error!.localizedDescription)")
return
)
)
然后我为QBChatDelegate
和QBChatServiceDelegate
调用所有可能的委托方法;
// QMChatServiceDelegate
func chatService(_ chatService: QMChatService, didAddChatDialogToMemoryStorage chatDialog: QBChatDialog)
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didCreateDialogs()
func chatService(_ chatService: QMChatService, didAddChatDialogsToMemoryStorage chatDialogs: [QBChatDialog])
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didCreateDialogs()
func chatService(_ chatService: QMChatService, didUpdateChatDialogInMemoryStorage chatDialog: QBChatDialog)
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didUpdateDialogs([chatDialog])
func chatService(_ chatService: QMChatService, didUpdateChatDialogsInMemoryStorage dialogs: [QBChatDialog])
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didUpdateDialogs(dialogs)
func chatService(_ chatService: QMChatService, didDeleteChatDialogWithIDFromMemoryStorage chatDialogID: String)
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didDeleteDialogs()
func chatService(_ chatService: QMChatService, didAddMessageToMemoryStorage message: QBChatMessage, forDialogID dialogID: String)
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didCreateMessages()
func chatService(_ chatService: QMChatService, didAddMessagesToMemoryStorage messages: [QBChatMessage], forDialogID dialogID: String)
self.log.info()
self.notifyOfNewMessage()
self.delegate?.didCreateMessages()
func chatService(_ chatService: QMChatService, didUpdate message: QBChatMessage, forDialogID dialogID: String)
self.log.info()
func chatService(_ chatService: QMChatService, didUpdate messages: [QBChatMessage], forDialogID dialogID: String)
self.log.info()
func chatService(_ chatService: QMChatService, didReceiveNotificationMessage message: QBChatMessage, createDialog dialog: QBChatDialog)
self.log.info()
func chatService(_ chatService: QMChatService, didLoadMessagesFromCache messages: [QBChatMessage], forDialogID dialogID: String)
self.log.info()
func chatService(_ chatService: QMChatService, didDeleteMessageFromMemoryStorage message: QBChatMessage, forDialogID dialogID: String)
self.log.info()
func chatService(_ chatService: QMChatService, didDeleteMessagesFromMemoryStorage messages: [QBChatMessage], forDialogID dialogID: String)
self.log.info()
func chatService(_ chatService: QMChatService, didLoadChatDialogsFromCache dialogs: [QBChatDialog], withUsers dialogsUsersIDs: Set<NSNumber>)
self.log.info()
// QBChatDelegate
func chatDidReceive(_ message: QBChatMessage)
self.log.info()
func chatRoomDidReceive(_ message: QBChatMessage, fromDialogID dialogID: String)
self.log.info(message.text)
编辑:删除了不相关的委托方法和对 tableview 的引用,因为它与 在创建新对话框时没有调用委托方法的问题无关
【问题讨论】:
总是包含相关代码.. 这就像通过一条短信诊断患者,他说他感觉不舒服.. 你必须用tableView.reloadData()
重新加载你的tableView
@MilanNosáľ 老实说,我不确定是否可以添加任何代码。正如我所说,我已经实现了两个独立对象的每个委托方法。其中一个应该捕获一个新对话框,但没有一个。
嗯,大多数时候问题出在代码上,因为它并没有真正实现开发人员认为的那样。这就是你的情况——你相信你正确地实现了它,但它的行为却不是这样。现在你认为我们应该如何给你任何建议,当你真的只向我们展示你的假设时,他们有什么问题?有数千种可能的原因可能导致这种情况..
@MilanNosáľ 问题已用代码更新
【参考方案1】:
您是否在发送/接收新消息时执行 tableView.reloadData()。
确保更新用于返回 tableView 部分中的行数的数据结构。
【讨论】:
我知道何时收到 existing 对话框中的新消息,但不知道何时收到新对话框中的新消息 - 没有调用委托方法。如果调用了一个委托方法,上面写着“嘿,我刚刚收到一个新对话框和消息”,那么我将重新加载表格视图。以上是关于创建新对话框时未调用委托方法的主要内容,如果未能解决你的问题,请参考以下文章
实现我自己的委托时未调用 UIAlertViewDelegate 方法 clickedButtonAtIndex
在 UITableviewCell 中使用 UICollection 视图时未调用 UICollectionView 委托方法“didSelectItemAtIndexPath”