- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JSQMessageViewController 进行聊天实现。我能够通过 json Post 和 get 发送和接收消息。
我能够加载我的聊天记录,没有任何错误。使用计时器(5秒)来检索消息。
它在一段时间内工作正常,每 5 秒重新加载一次消息。
过了一会儿,我突然在下面一行收到“ fatal error :索引超出范围”。
override func collectionView(_ collectionView: JSQMessagesCollectionView, messageDataForItemAt indexPath: IndexPath) -> JSQMessageData {
//app Crashes here : fatal error: Index out of range
return messages[indexPath.item]
}
下面是代码 var messages = JSQMessage
var outgoingBubbleImageView:JSQMessagesBubbleImage! //= JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImage(with: UIColor.jsq_messageBubbleGreen())
var incomingBubbleImageView:JSQMessagesBubbleImage! //= JSQMessagesBubbleImageFactory().incomingMessagesBubbleImage(with: UIColor.jsq_messageBubbleLightGray())
var batchMessages = true
// Refresh Messages
var timer : Timer!
// Don't double load!
var isLoading = false
override func viewDidLoad() {
super.viewDidLoad()
collectionView!.collectionViewLayout.incomingAvatarViewSize = CGSize.zero
collectionView!.collectionViewLayout.outgoingAvatarViewSize = CGSize.zero
outgoingBubbleImageView = JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImage(with: uicolorFromHex(0xDCF8C7))
incomingBubbleImageView = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImage(with: UIColor.jsq_messageBubbleLightGray()) //uicolorFromHex(0xF6F6F6)
let defaults = UserDefaults.standard
let usertype = defaults.object(forKey: "UserType") as! String
self.userType = usertype
//self.getChatHistory(ipAddress+"/VIOService.svc/JSONService/chatorderhistoryget/"+EmailId+"/"+toEmail+"/"+OrderId)//self.finishReceivingMessage()
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Close", style: .plain, target: self, action: #selector(addTapped))
self.sender = userType
self.inputToolbar.contentView?.leftBarButtonItem = nil
// This is a beta feature that mostly works but to make things more stable it is diabled.
collectionView?.collectionViewLayout.springinessEnabled = false
automaticallyScrollsToMostRecentMessage = true
// self.collectionView?.reloadData()
self.collectionView?.layoutIfNeeded()
self.isLoading = false
self.loadMessages()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
collectionView!.collectionViewLayout.springinessEnabled = false
timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(ChatMessagesViewController.loadMessages), userInfo: nil, repeats: true)
}
func addMessage(_ id: String, text: String) {
print("add message: \(text)")
let message = JSQMessage(senderId: id, displayName: "Me", text: text)
messages.append(message)
}
func loadMessages() {
// self.messages = [JSQMessage]()
// self.messages.removeAll()
if self.isLoading == false {
isLoading = true
self.getChatHistory(mYURL)
finishReceivingMessage()
}
}
func getChatHistory(_ url:String) {
messages.removeAll()
// messages.removeAll(keepingCapacity: true)
let requestURL: URL = URL(string: url)!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest) {data,response,error in
let httpResponse = response as! HTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("everything is fine, file downloaded successfully.")
print(response!)
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)
if let items = json as? [[String: AnyObject]] {
for item in items {
if let sentBy = item["SentBy"] as? String {
if let SentTo = item["SentTo"] as? String {
if let Message = item["Msg"] as? String {
if let IsType = item["IsType"] as? String {
if let mesSentOn = item["MsgSenton"] as? String //Date {
{
//
让添加= chatHistory(SentBy:sentBy,SentTo:SentTo,消息:Message,IsType:IsType,SentOn:mesSentOn)
self.chatHist.append(add)
self.from = SentTo
self.to = sentBy
var message:String=""
if let range = Message.range(of: ";") {
message = Message.substring(from: range.upperBound)
}
self.addMessage(IsType, text: message)
}
}
}
}
}
self.do_collectionView_refresh()
}
}
}
catch {
print("Error with Json: \(error)")
}
}
}
isLoading = false
task.resume()
}
函数 do_collectionView_refresh() {
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
}
override func senderId() -> String {
return userType
}
override func senderDisplayName() -> String {
return "Me"
}
override func collectionView(_ collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
if messages.count > 0 {
return messages.count
}
else {
return 0
}
// return messages.count
}
override func collectionView(_ collectionView: JSQMessagesCollectionView, messageDataForItemAt indexPath: IndexPath) -> JSQMessageData {
//app Crashes here : fatal error: Index out of range
return messages[indexPath.item]
}
override func collectionView(_ collectionView: JSQMessagesCollectionView, messageBubbleImageDataForItemAt indexPath: IndexPath) -> JSQMessageBubbleImageDataSource {
// return messages[indexPath.item].senderId == self.senderId() ? outgoingBubble : incomingBubble
let message = messages[indexPath.item]
// let message = chatHist[indexPath.item]
// 1
if message.senderId == userType { //
return outgoingBubbleImageView
} else { // 3
return incomingBubbleImageView
}
}
我遇到了这个错误,请有人帮忙。
最佳答案
请告诉我这是否有影响:
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return messages.count
}
override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAt indexPath: IndexPath!) -> JSQMessageData! {
let data = self.messages[indexPath.row]
return data
}
override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAt indexPath: IndexPath!) -> JSQMessageBubbleImageDataSource! {
let data = messages[indexPath.row]
switch(data.senderId) {
case self.senderId:
return self.outgoingBubbleImageView
default:
return self.incomingBubbleImageView
}
}
关于swift - JSQMessageViewController : fatal error: Index out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162179/
我正在尝试使用 JSQMessage 框架实现聊天。但是当我运行它时,应用程序崩溃并且出现以下错误: libc++abi.dylib: terminating with uncaught except
我正在构建一个消息传递应用程序,我使用 JSQMessageViewController 来呈现消息,它非常棒。现在我在尝试自定义发送按钮时遇到了一个小问题: 基本上我想将左右 BarButtonIt
在此方法中使用适用于 iOS 的 JSQMessage podfile; collectionView:(JSQMessagesCollectionView *)collectionView cell
我正在使用 JSQmessageViewController,并且我的应用程序中有一个选项卡栏。选项卡栏隐藏了文本字段并使其无法使用。有人有解决办法吗? 最佳答案 将 View 的 contentIn
我们能否像单线程页面中的 skype 一样,从下到上更改头像/个人资料图像的位置。注:Github 也遵循相同的。 最佳答案 他们有维护单独的单元格 xibs。你只需要对那些 xibs 进行更改,还需
我目前正在使用 JSQMessageViewController 并用 firebase 表中的数据填充它 - 我遵循了 Firebase 网站上可用的 Fire-chat 示例。一切正常,除了出于某
如何处理JSQMessageController中的删除操作,我已经实现了方法 override func collectionView(collectionView: JSQMessagesColl
我正在使用 JSQMessageviewcontroller 通过解析创建一个聊天客户端。除了“我发送的消息在 jsqmessage 数组中添加了两次”之外,我成功地实现了所有目标。 Althuogh
我有以下函数被调用以添加消息: func addMessage(text: String, displayName: String) { let message = JSQMe
有没有办法隐藏消息气泡内文本中的链接?我不需要它! 是否需要设置一些设置,例如: disableLink = true 非常感谢您的回复! 最佳答案 在 JSQMessagesCellTextView
我想得到关于如何做的解释,什么类子类。覆盖什么等等。用于jsqmessageViewcontroller框架 例如传出单元格,如何构建我的输出布局和标签 任何帮助将不胜感激 是的,我确实搜索过它,但没
我正在使用 JSQmessageviewcontroller,但我希望气泡没有尾部,只是圆角矩形,这可能吗?我目前正在做类似的事情: JSQMessagesBubbleImageFactory *bu
我正在使用 JSQMessageViewController 并且我面临的问题(仅在 ios14 中)我无法在设备中看到图像、视频和音频等媒体项目,尽管这些 View 正在生成调试 View 层次结构
我有一个扩展的类:JSQLloadingPhotoMediaItem,一切正常,预计在我的聊天中我不使用图像作为气泡,但我在气泡内有一个背景颜色和textView的半径,如果我使用该类,我会得到这个:
我正在使用 JSQMessageViewController 进行聊天实现。我能够通过 json Post 和 get 发送和接收消息。 我能够加载我的聊天记录,没有任何错误。使用计时器(5秒)来检索
我想创建一个聊天,当我点击消息气泡时,它会说出 JSQMessage 的文本部分 我使用的代码如下: public func collectionView(collectionView: JSQMes
我正在尝试将手势识别器添加到与我聊天的用户的头像图像中。我将它放在 cellForItemAt 函数中,但它不起作用。我不确定在哪里或如何在头像上添加手势识别器。我想让头像能够被触摸,然后将用户发送到
我正在使用 JSQMessageViewControllers 库来实现聊天 View 。但是,我想在聊天中隐藏头像。 根据以下文档。 http://cocoadocs.org/docsets/JSQ
我是一名优秀的程序员,十分优秀!