如何从 XMPP 获取图像?
Posted
技术标签:
【中文标题】如何从 XMPP 获取图像?【英文标题】:How can I get image from XMPP? 【发布时间】:2015-09-09 05:56:45 【问题描述】:我想从 XMPP 获取用户头像图像,为此我这样做:
let photoData: NSData = (self.xmppvCardAvatarModule?.photoDataForJID(XMPPJID.jidWithString(onlineBuddies[indexPath.row] as! String)))!
cell.avatarImage.image = UIImage(data: photoData)
但它会返回下一个错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
当我打印这个时:
XMPPJID.jidWithString(onlineBuddies[indexPath.row] as! String)
它打印我的用户名,但整行返回 nil:
self.xmppvCardAvatarModule?.photoDataForJID(XMPPJID.jidWithString(onlineBuddies[indexPath.row] as! String))
我该如何解决?
【问题讨论】:
如果从数据库中找不到 vcard(同步或异步),则应从服务器获取,收到 vCard 后即可获取 :) @MohamadFarhand 感谢您的回复!请您帮帮我好吗? 【参考方案1】:我建议这样使用:
[self.vCardTempModule fetchvCardTempForJID:[XMPPJID jidWithString:phoneNumber] ignoreStorage:YES];
在Delegate
中处理照片- (void)xmppvCardTempModule:(XMPPvCardTempModule *)vCardTempModule
didReceivevCardTemp:(XMPPvCardTemp *)vCardTemp
forJID:(XMPPJID *)jid
NSString * base64OfImage = [[vCardTemp elementForName:@"PHOTO"]stringValue];
还有另一种方法可以从另一个 Delegate 接收 UIImage 对象,我建议查看有关 vCard 的文档
-(void)xmppvCardAvatarModule:(XMPPvCardAvatarModule *)vCardTempModule didReceivePhoto:(UIImage *)photo forJID:(XMPPJID *)jid
【讨论】:
它返回一个错误'Void' is not convertible to 'NSData'
。我将您的代码转换为 swift 并得到:let photoData: NSData = self.xmppvCardTempModule!.fetchvCardTempForJID(jIDis, ignoreStorage: true) cell.avatarImage.image = UIImage(data: photoData)
那里 let jIDis = XMPPJID.jidWithString(onlineBuddies[indexPath.row] as? String)
和应用程序委托 func xmppvCardTempModule(vCardTempModule: XMPPvCardTempModule, didReceivevCardTemp vCardTemp: XMPPvCardTemp, forJID jid: XMPPJID) var base64OfImage: String = vCardTemp.elementForName("PHOTO").stringValue()
我认为这是一个 void 方法和异步,所以你应该在 Delegates 中接收数据,毕竟,创建 nsdata :)
你能帮我聊天吗?
嗯好的兄弟,但我这次有点忙以上是关于如何从 XMPP 获取图像?的主要内容,如果未能解决你的问题,请参考以下文章
成功登录xmpp服务器后如何获取xmpp用户(iPhone SDK)?
XMPP Farmework 如何在iOS中获取XMPP聊天室列表?