我开发一个聊天应用,我在显示头像问题我JSQMessagesViewController
斯威夫特 - JSQMessagesViewController与斯威夫特
override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
var avatar = UIImage()
let people = FIRDatabase.database().reference().child("people").child(senderId)
people.observeEventType(.Value, withBlock: {
snapshot -> Void in
let dict = snapshot.value as! Dictionary<String, AnyObject>
let imageUrl = dict["profileImage"] as! String
if imageUrl.hasPrefix("gs://") {
FIRStorage.storage().referenceForURL(imageUrl).dataWithMaxSize(INT64_MAX, completion: { (data, error) in
if let error = error {
print("Error downloading: \(error)")
return
}
avatar = UIImage.init(data: data!)!
})
}
})
let AvatarJobs = JSQMessagesAvatarImageFactory.avatarImageWithPlaceholder(avatar, diameter: UInt(kJSQMessagesCollectionViewAvatarSizeDefault))
return AvatarJobs
}
这里的问题是,当我试图拉的图像发件人firebase,我得到一个空白图像,但是当我尝试使用let AvatarJobs = JSQMessagesAvatarImageFactory.avatarImageWithPlaceholder(UIImage(named: "icon.png"), diameter: UInt(kJSQMessagesCollectionViewAvatarSizeDefault))
它工作正常,你认为这里的问题是什么?谢谢!
这是一个很好的解决方案,只需要在应用程序中触发一次即可为您提供化身。因此,优化您的应用程序以加快载入速度,因为您不必为每个单元格获取图像,从而创建单元格。 –
嗨!这是什么类型的MyImageCache?这是AnyObject吗?同样在这一行'func createAvatar(senderId:String,senderDisplayName:String,user:FIRUser,color:UIColor)''我将'FBUser'替换为'FIRUser',并且在这行中出现这个错误'else if let photoUrl = user.pictureURL其中user.pictureURL!=“”'这里似乎是什么问题?谢谢! –
用我用于缓存的自定义类更新了我的答案。我还将用户类中的用户数据(user.pictureUR)保存到数据库中,您将不得不自定义数据,而只需传递url。 –