我怎样才能得到Friends vcard avtar photo xmpp ios

Posted

技术标签:

【中文标题】我怎样才能得到Friends vcard avtar photo xmpp ios【英文标题】:How can i get Friends vcard avtar photo xmpp ios 【发布时间】:2014-12-19 05:53:40 【问题描述】:

?请任何人帮助我...提前谢谢

XMPPvCardTemp *myvCardTemp = [self xmppvCardTempModule];//检查是否存在

if (!myvCardTemp)//if not then create a new vcard

    NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
    XMPPvCardTemp *newvCardTemp = [self.xmppvCardTempModule vCardTempFromElement:vCardXML];
    [newvCardTemp setNickname:userName];
    [self updateMyvCardTemp:newvCardTemp];


NSString *str = [[NSUserDefaults standardUserDefaults] stringForKey:user_ID];

[self.xmppvCardTempModule fetchvCardTempForJID:str];

【问题讨论】:

试试这个***.com/questions/13227017/… 可能会有帮助。 嗨 Velmurugan,实际上我能够成功地更新我的头像。但现在需要获取朋友头像并在朋友表格视图中显示。请帮助我,因为我对 xmpp 完全陌生。非常感谢您的快速回复:0 【参考方案1】:

初始化并激活 xmppvCardAvatarModule 模块。

- (void) fetchVCardFor:(NSString *)toUser
    
        XMPPJID *myJID = [XMPPJID jidWithUser:[toUser stringByReplacingOccurrencesOfString:@"+" withString:@""] domain:self.domain resource:self.resource];
        [self.xmppvCardTempModule fetchvCardTempForJID:myJID useCache:YES];
    

您将在 IQ 中得到如下结果:

   - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
   
      XMPPvCardTemp *vCardTemp = [XMPPvCardTemp vCardTempCopyFromIQ:iq];
      if (vCardTemp != nil)
      
          [self _updatevCardTemp:vCardTemp forJID:[iq from]];
          return YES;
      
      return NO;

【讨论】:

【参考方案2】:

您可以通过 XMPPUserCoreDataStorageObject 信息获取您朋友的 VCard 头像图片(如果您的朋友已经设置了图片)。

-(UIImage*)GetFriendImage:(XMPPUserCoreDataStorageObject *)user 

    //Check user has image on XMPPUserCoreDataStorageObject or  not.
    if (user.photo != nil) 
        return  user.photo;
     else 

         //Retrive image from xmppvCardAvatarModule
        NSData *photoData = [[[self appDelegate] 
        xmppvCardAvatarModule] photoDataForJID:user.jid];

        //Check xmppvCardAvatarModule has image or not, if xmppvCardAvatarModule return nil means your friend not set there image, so return your any default image.  
        if (photoData != nil) 
           return [UIImage imageWithData:photoData];
         else 
           return [UIImage imageNamed:@"defaultImage"];
        
    

这里[self appDelegate]定义为

- (AppDelegate *)appDelegate 
   return (AppDelegate *)[[UIApplication sharedApplication] delegate];

我将所有 xmpp 对象定义为 AppDelegate.h 文件的属性

@property (nonatomic, readonly) XMPPvCardAvatarModule *xmppvCardAvatarModule;

对于 VCard,导入 #import "XMPPvCardAvatarModule.h" 文件,否则检查此文件是否已导入 #import "XMPPFramework.h" 文件,而不是忽略重新导入。

您可以使用他的 JID 来检索 XMPPUserCoreDataStorageObject “用户对象”,就像这样

XMPPUserCoreDataStorageObject *user = [[[self appDelegate] xmppRosterStorage]
                                           userForJID:userJID
                                           xmppStream:[[self appDelegate] xmppStream]
                                 managedObjectContext:[[self appDelegate] managedObjectContext_roster]];

然后将此用户对象传递给GetFriendImage 以检索朋友图像。

【讨论】:

以上是关于我怎样才能得到Friends vcard avtar photo xmpp ios的主要内容,如果未能解决你的问题,请参考以下文章

如何将 VCard 解析为 Python 字典?

我怎样才能只得到一个旋转矩形的四个角?

我怎样才能得到这个界面?

我怎样才能得到msi的版本

我怎样才能得到这个 Xpath

我怎样才能得到2列collectionview