JSQMessageView を使用すると、最初の読み込み時にすべてのアバターの画像 URL がないため、URL を取得して取得する非同期呼び出しがあり、次にアバターの画像が取得されます。
非同期プロセスからアバターを取得したら、プレースホルダーのアバター画像を更新するにはどうすればよいですか?
JSQMessageAvatarImageDataSource に関するいくつかのメモを見ましたが、ドキュメントには、キーやインデックスなどのパラメーターを持たない単一の画像のみを返すプロトコル メソッドが示されているため、このプロトコルを実装する方法がわかりません。
このユースケースを実装する方法の例はありますか?
これまでの私の実装
override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
let message = messages[indexPath.item]
let diameter = UInt(collectionView.collectionViewLayout.incomingAvatarViewSize.width)
if let avatar = avatars[message.senderDisplayName] {
return avatar
} else {
// how do I update the avatars when i come back form the async call here
// APIClient.instance.getUserThumbnail(Int(message.senderId)!, completion: { (url, error) -> () in
// self.setupAvatarImage(message.senderDisplayName, imageUrl: url, diameter: 30)
// })
//default placeholder while the async call is happening
return setupAvatarColor(message.senderDisplayName, diameter: diameter)
}
}