XMPPFramework:尝试更新 VCard 上的昵称
Posted
技术标签:
【中文标题】XMPPFramework:尝试更新 VCard 上的昵称【英文标题】:XMPPFramework: Trying to update nickname on 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 参数... :( 【参考方案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: [来自]];它现在似乎可以作为一个补丁工作......但是知道这种行为的起源会很有趣以上是关于XMPPFramework:尝试更新 VCard 上的昵称的主要内容,如果未能解决你的问题,请参考以下文章