如何从 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 获取图像?的主要内容,如果未能解决你的问题,请参考以下文章

使用 strophe 获取在线用户列表 xmpp [关闭]

成功登录xmpp服务器后如何获取xmpp用户(iPhone SDK)?

从 xmpp 服务器设置/获取用户信息:python

XMPP Farmework 如何在iOS中获取XMPP聊天室列表?

使用 `xmpp` 和 `smack` 从 `vcard` 获取自定义元素

无法从服务器 XMPP 框架中获取 XMPPRoom 的详细信息