0

这个问题就像它的标题所说的一样简单:我正在尝试更新他的 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)

4

1 回答 1

0

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

实际上,当我阅读 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 ;
   }
于 2013-05-13T15:40:39.847 回答