我的 JSQMessageView 控制器 collectionView 被调用了 4 次
My JSQMessageView Controller collectionView is being called 4 times
我在实施照片媒体项目时发现了一些极端的性能问题。当我开始调试时,我注意到 messageDataForItemAtIndexPath
每个项目都被调用了 4 次,而在我设置的另一个示例项目中它被调用了 10 次
这是我为测试而设置的一个虚拟项目,它调用每个项目 10 次,即使只有一个消息项目。
这给我带来了问题,因为这是我开始异步下载媒体照片并为每个项目调用下载媒体请求 10 次的功能,这给我带来了问题。
我是不是误解了一些基本的东西?
import UIKit
import JSQMessagesViewController
class ViewController: JSQMessagesViewController {
var messages = [JSQMessage]()
override func viewDidLoad() {
super.viewDidLoad()
self.senderId = "1"
self.senderDisplayName = "me"
let message = JSQMessage(senderId: "admin", displayName: "Admin", text:"hello from admin")
self.messages.append(message)
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.messages.count
}
override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {
return JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.blueColor())
}
override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
return nil
}
override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
//why is this called 10 times?
let msg = self.messages[indexPath.item];
let text = msg.text
print(text + ":" + String(indexPath.item))
return JSQMessage(senderId: msg.senderId, displayName: msg.senderDisplayName, text: text)
}
}
这将在控制台输出
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
看起来这是设计使然。
在这里回答:
https://github.com/jessesquires/JSQMessagesViewController/issues/1211
我在实施照片媒体项目时发现了一些极端的性能问题。当我开始调试时,我注意到 messageDataForItemAtIndexPath
每个项目都被调用了 4 次,而在我设置的另一个示例项目中它被调用了 10 次
这是我为测试而设置的一个虚拟项目,它调用每个项目 10 次,即使只有一个消息项目。
这给我带来了问题,因为这是我开始异步下载媒体照片并为每个项目调用下载媒体请求 10 次的功能,这给我带来了问题。
我是不是误解了一些基本的东西?
import UIKit
import JSQMessagesViewController
class ViewController: JSQMessagesViewController {
var messages = [JSQMessage]()
override func viewDidLoad() {
super.viewDidLoad()
self.senderId = "1"
self.senderDisplayName = "me"
let message = JSQMessage(senderId: "admin", displayName: "Admin", text:"hello from admin")
self.messages.append(message)
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.messages.count
}
override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {
return JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor.blueColor())
}
override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
return nil
}
override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
//why is this called 10 times?
let msg = self.messages[indexPath.item];
let text = msg.text
print(text + ":" + String(indexPath.item))
return JSQMessage(senderId: msg.senderId, displayName: msg.senderDisplayName, text: text)
}
}
这将在控制台输出
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
hello from admin:0
看起来这是设计使然。
在这里回答:
https://github.com/jessesquires/JSQMessagesViewController/issues/1211