Swift UITableView中的行插入问题

Swift UITableView中的行插入问题,swift,uitableview,Swift,Uitableview,我有一个UIView和一个列出聊天的UITableView。 当点击某个特定的对话时,我会切换到另一个UIView,该UIView再次保存一个UITableView,其中列出了该聊天的各个消息,即聊天详细信息 ChatDetailViewController如下所示: class ChatDetailViewController:UIViewController、UITableViewDelegate、UITableViewDataSource{ @ibvar用户标识:UIImageView!

我有一个UIView和一个列出聊天的UITableView。 当点击某个特定的对话时,我会切换到另一个UIView,该UIView再次保存一个UITableView,其中列出了该聊天的各个消息,即聊天详细信息

ChatDetailViewController如下所示:

class ChatDetailViewController:UIViewController、UITableViewDelegate、UITableViewDataSource{
@ibvar用户标识:UIImageView!
@ibvar用户名:UILabel!
@ibvar弱消息列表:UITableView!
@IBOutlet弱var MessageTextField:UITextField!
@IBVAR发送按钮:UIButton!
变量对话:Int=0
设apiService=apiService()
var conversationDetails=conversationDetails()
var groupedMessages=[Date:[ChatMessage]]()
变量键=[日期]()
重写func viewDidLoad(){
super.viewDidLoad()
self.UserName.text=“”
self.MessageList.separatorStyle=.none
self.MessageList.delegate=self
self.MessageList.dataSource=self
//self.SendButton.addTarget(self,操作:#选择器(sendMessage),for:.touchUpInside)
//加载消息:
self.apiService.getChatMessages(会话:self.conversation,完成:{结果为
切换结果{
成功案例(让对话详细信息):
DispatchQueue.main.async{
self.conversationDetails=会话详细信息
//准备标题部分:
让URLstring=self.conversationDetails.participants![0].profileimage
让imgURL=URL(string:URLstring??“www.foo.com”)//TODO:插入占位符图像
self.UserLogo.sd_setImage(带:imgURL,占位符image:UIImage(名为:“icon.turq.png”))
self.UserLogo.clipstobunds=true
self.UserLogo.layer.cornerRadius=self.UserLogo.frame.size.width/2
self.UserName.text=self.conversationDetails.participants![0]。用户名
//对邮件进行分组和排序:
设cal=Calendar.current
self.groupedMessages=字典(分组:self.conversationDetails.messages!,作者:{cal.startOfDay(for:$0.tsp!))
self.keys=self.groupedMessages.keys.sorted(按:{$0<$1})
//重新加载:
self.MessageList.reloadData()
}
案例。失败(let错误):
打印(“发生错误\(error.localizedDescription)”)
}
})
...
}
...
func numberOfSections(在tableView:UITableView中)->Int{
返回self.keys.count
}
func tableView(tableView:UITableView,viewForHeaderInSection:Int)->UIView{
let label=customSectionHeaderLabel()
让dateFormatter=dateFormatter()
dateFormatter.dateFormat=“dd-MM-yyyy”
label.text=dateFormatter.string(from:self.keys[节])
让headingContainer=UIView()
headingContainer.addSubview(标签)
label.centerXAnchor.constraint(equalTo:headingContainer.centerXAnchor).isActive=true
label.centerYAnchor.constraint(equalTo:headingContainer.centerYAnchor).isActive=true
回流头容器
}
... 
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回self.groupedMessages[键[节]!.计数
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
让cell=tableView.dequeueReusableCell(标识符为:“MessageViewCell”,用于:indexath)作为!ChatMessageViewCellController
让tspSortedInGroup=self.groupedMessages[self.keys[indexPath.section]!.排序(按:{$0.tsp!<$1.tsp!})
让chatMessage=tspSortedInGroup[indexPath.row]
cell.ChatMessageText.text=chatMessage.message
cell.isIncoming=self.isIncoming(消息:chatMessage)
返回单元
}
func isIncoming(消息:ChatMessage)->Bool{
返回消息.sender?.id!=Globals.shared.user?.id
}
@iAction func sendMessage(sender:Any){
打印(self.MessageTextField.text)
//创建新的聊天室消息对象
让我们现在=日期()
var newMessage=ChatMessage()
newMessage.tsp=now
newMessage.message=self.MessageTextField.text
newMessage.sender=Globals.shared.user
//调用api来存储发送的消息
self.apiService.sendChatMessage(会话:self.conversation,消息:newMessage.message!,完成:{结果为
切换结果{
成功案例(让我们来回答):
DispatchQueue.main.async{
//附加到分组消息
self.groupedMessages[self.keys.last!]?.append(newMessage)
var path=IndexPath(行:self.groupedMessages[self.keys.last!]!.count-1,节:self.keys.count-1)
self.MessageList.beginUpdate()
self.MessageList.insertRows(位于:[path],带:.fade)
self.MessageList.endUpdates()
self.MessageTextField.text=nil
self.MessageList.scrollToRow(在:路径,在:。底部,动画:true)
}
案例。失败(let错误):
打印(“发生错误\(error.localizedDescription)”)
}
})
}
...   
}
几乎所有的事情都像你期望的那样工作。 当我启动应用程序时,单击特定聊天的详细信息,所有消息都会加载。 当我输入一条消息并点击send时,它被存储在数据库中并显示在屏幕上。屏幕向下滚动。一切都很完美。我可以重复发送消息。我也很好

当我回到聊天概述(向下滑动模式)并进入dif时