【问题标题】:XMPPFramework: Trying to update nickname on VCardXMPPFramework:尝试更新 VCard 上的昵称
【发布时间】:2013-05-13 14:54:26
【问题描述】:

这个问题就像它的标题所说的那样简单:我正在尝试更新他的 VCard 上的用户昵称,但我不能。我正在使用此代码:

dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
    dispatch_async(queue, ^{
        XMPPvCardTemp *myVcardTemp = [[[self appDelegate] xmppvCardTempModule] myvCardTemp];
        [myVcardTemp setNickname:@"a_nickname"];
        [[[self appDelegate] xmppvCardTempModule] updateMyvCardTemp:myVcardTemp];
    });

我无法想象为什么这段代码不想工作,而同一段但更新照片却像魅力一样工作:

NSData *imageData = UIImagePNGRepresentation(anImage);
        dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
        dispatch_async(queue, ^{
            XMPPvCardTemp *myVcardTemp = [[[self appDelegate] xmppvCardTempModule] myvCardTemp];
            [myVcardTemp setPhoto:imageData];
            [[[self appDelegate] xmppvCardTempModule] updateMyvCardTemp:myVcardTemp];
        });

任何帮助将不胜感激......这让我发疯了

注意:我使用 OpenFire 作为 XMPP 服务器

这是我尝试更新昵称时服务器返回给我的节

RECV: <iq xmlns="jabber:client" type="result" from="7db55e68-cb18-4826-befd-0eb9269637aa@000.000.000.000" to="7db55e68-cb18-4826-befd-0eb9269637aa@000.000.000.000/2cfc4f88"><chat_jorges xmlns="vcard-temp"><NICKNAME>chat_jorges</NICKNAME></chat_jorges></iq>

(我将服务器的 ip 更改为 000.000.000.000)

【问题讨论】:

  • 也许这很愚蠢,但您是否尝试过:setNICKNAME = @"您的昵称"?
  • 好吧,XMPPvCardTemp 没有实现 setNICKNAME,但 setNickname 如图所示...不过谢谢 :)
  • 对不起。但是我越读你的问题,它就越让我发疯。如果您也将其作为数据推送? (想知道它怎么会……)
  • 好点弗兰克,真的好点...让我试试...
  • 好吧,setNickname 方法需要一个 NSString 参数而不是 NSData 参数... :(

标签: ios xmpp xmppframework


【解决方案1】:

编辑:我完全错了不要读这个

其实我在看XMPP的源码的时候,就想知道它是怎么设置值的。 在 XMPPvCardTempBase.h 中:

#define XMPP_VCARD_SET_STRING_CHILD(Value, Name) NSXMLElement *elem = [self elementForName:(Name)];
//it looks like a get and not a set??

在 XMPPvCardTemp.m 中:

- (void)setNickname:(NSString *)nick {
    XMPP_VCARD_SET_STRING_CHILD(nick, @"NICKNAME");
}

也许某处有 KVC 之类的东西...... 你能在源代码中试试这个吗:

 - (void)setNickname:(NSString *)nick {
       XMPP_VCARD_SET_STRING_CHILD(nick, @"NICKNAME") = nick ;
   }

【讨论】:

  • 好的,我马上试试。感谢您的时间。我会提供反馈:)
  • 实际上,如果我使用您提出的调整,XCode 会给出错误“预期表达式”。如果可以看到,XMPP_VCARD_SET_STRING_CHILD 的定义已经将“nick”设置为“Value”...
  • 哦,是的,你是对的,我没有看到定义的完整实现。
  • 看来,如果我在更新昵称后立即发送出席信息,委托方法 didReceivePresence 将在其他设备上触发,然后我可以触发此代码: [xmppRoster setNickname:@"name" forUser: [来自]];它现在似乎可以作为一个补丁工作......但是知道这种行为的起源会很有趣
猜你喜欢
  • 2013-09-24
  • 2019-06-17
  • 1970-01-01
  • 2014-02-19
  • 2016-05-23
  • 2021-04-15
  • 1970-01-01
  • 2015-05-06
  • 2021-06-10
相关资源
最近更新 更多