Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7635857
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 31, 20262026-05-31T07:31:53+00:00 2026-05-31T07:31:53+00:00

I am creating an iphone app with xmpframework, everything works fine, but i would

  • 0

I am creating an iphone app with xmpframework, everything works fine, but i would like to update my profile picture with the following code. and i got some incorrect recursive vCard-temp request to the server. But the picture got updated, and notified all friends in my roster.

//I clicked on the button
-(void)updatevCardButtonClicked{
   XMPPvCardTemp *vCardTemp = [[[self appDelegate] xmppvCardTempModule] myvCardTemp];
   NSLog(@"my vCardTemp: %@", vCardTemp);
   NSData *tempImage = [self getDataFromImage:[self resizeImage:userImage]];
   [vCardTemp setPhoto: tempImage];
   [[[self appDelegate] xmppvCardTempModule]updateMyvCardTemp:vCardTemp];
}

output and explanation below

my vCardTemp: *nil description*
MyApp[60625:6c1b] XMPPvCardCoreDataStorage: Triggering save (pendingRequests=0)
MyApp[60625:207] MyAppDelegate: xmppStream:didReceiveIQ: - E49C843A-5A05-4148-A4CF-B400062A83C0
MyApp[60625:207] MyAppDelegate: xmppStream:didReceivePresence: - <presence xmlns="jabber:client"    from="myJabberAccount@127.0.0.1/1948110991326183732515886" to="myJabberAccount@127.0.0.1/1948110991326183732515886">
  <status>At  work</status>
  <x xmlns="vcard-temp:x:update">
        <photo>1f6401ddea76826fddc4cd7ddc17741db6c9dabc</photo>
  </x>
  <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="></c>
  <x xmlns="vcard-temp:x:update">
        <photo>c3b2d65259a4fc1d37e56777697d4f5a9730fb03</photo></x><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="></c>
  </presence>
MyApp[60625:5323] XMPPRosterCoreDataStorage: handlePresence:xmppStream:

//repeat start from here, and the DidReceivePresence: will grow into tons of lines with the samthing
MyApp[60625:207] XMPPRosterCoreDataStorage: userForJID:xmppStream:managedObjectContext:
MyApp[60625:1e0b] XMPPRosterCoreDataStorage: userForJID:xmppStream:managedObjectContext:
MyApp[60625:207] XMPPRosterCoreDataStorage: resourceForJID:xmppStream:managedObjectContext:
MyApp[60625:5323] XMPPvCardCoreDataStorage: Triggering save (pendingRequests=0)
MyApp[60625:207] MyAppDelegate: xmppStream:didReceiveIQ: - (null)
MyApp[60625:1e0b] XMPPvCardCoreDataStorage: Triggering save (pendingRequests=0)
MyApp[60625:207] MyAppDelegate: xmppStream:didReceivePresence: - <presence xmlns="jabber:client" from="myJabberAccount@127.0.0.1/1948110991326183732515886" to="myJabberAccount@127.0.0.1/1948110991326183732515886">
 <status>At work</status>
 <x xmlns="vcard-temp:x:update">
     <photo>1f6401ddea76826fddc4cd7ddc17741db6c9dabc</photo>
 </x>
 <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="></c>
 <x xmlns="vcard-temp:x:update">
     <photo>c3b2d65259a4fc1d37e56777697d4f5a9730fb03</photo>
 </x>
 <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="></c>
 <x xmlns="vcard-temp:x:update">
     <photo>c3b2d65259a4fc1d37e56777697d4f5a9730fb03</photo>
 </x>
 <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4=">
 </c>
 </presence>

//repeat the above in the rest of the output with more and more "vcard-temp:x:update"

what i found so far, the below cause this problem, but i can’t figure out where i can fix it.

//i found that these two "SEND" cause the problem, the app just keep sending these two 
SEND: <iq type="get" to="myJabberAccount@127.0.0.1"><vCard xmlns="vcard-temp"/></iq>
SEND: <presence>
    <x xmlns="vcard-temp:x:update">
        <photo>1f6401ddea76826fddc4cd7ddc17741db6c9dabc</photo>
    </x>
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="/>
    <x xmlns="vcard-temp:x:update">
        <photo>1f6401ddea76826fddc4cd7ddc17741db6c9dabc</photo>
    </x>
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="/>
    <x xmlns="vcard-temp:x:update">
        <photo>f93ee3918c7baaf095edb9f6bede892c603161af</photo>
    </x>
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="/>
    <x xmlns="vcard-temp:x:update">
        <photo>f93ee3918c7baaf095edb9f6bede892c603161af</photo>
    </x>
    <c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/xmppframework" ver="VyOFcFX6+YNmKssVXSBKGFP0BS4="/>
</presence>
 //this presence keep growing as you can see the repeated parts
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-31T07:31:54+00:00Added an answer on May 31, 2026 at 7:31 am

    I have been trying to tackle this problem for quite some time. Let me know if this works for you. Here’s my explanation:

    Whenever you send a presence element via xmppStream, it caches a copy of it under the “myPresence” instance variable.

    If you look for the following method in XMPPStream.m:

    - (void)continueSendElement:(NSXMLElement *)element withTag:(long)tag
    

    there is a comment about 10-20 lines down that says:

    // Update myPresence if this is a normal presence element.
    // In other words, ignore presence subscription stuff, MUC room stuff, etc.
    

    When the XMPPvCardAvatarModule class updates the vcard, it introduces things like the <x> and the <c> (capability) tags that pollutes the normal presence element.

    To fix this, we need to clean up those unnecessary tags. Here is a section of my edited code:

    else if ([element isKindOfClass:[XMPPPresence class]])
    {
        // Update myPresence if this is a normal presence element.
        // In other words, ignore presence subscription stuff, MUC room stuff, etc.
    
        XMPPPresence *presence = (XMPPPresence *)element;
    
        // We use the built-in [presence type] which guarantees lowercase strings,
        // and will return @"available" if there was no set type (as available is implicit).
    
        NSString *type = [presence type];
        if ([type isEqualToString:@"available"] || [type isEqualToString:@"unavailable"])
        {
            NSArray *vCardXElem = [presence elementsForName:@"x"];
            NSArray *capabilitiesHash = [presence elementsForName:@"c"];
    
            for (NSXMLElement *x in vCardXElem)
            {
                [presence removeChildAtIndex:[x index]];
            }
    
            for (NSXMLElement *c in capabilitiesHash)
            {
                [presence removeChildAtIndex:[c index]];
            }
    
            if ([presence toStr] == nil && myPresence != presence)
            {
                myPresence = presence;
            }
        }
    
        [multicastDelegate xmppStream:self didSendPresence:(XMPPPresence *)element];
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am creating an iphone performance app in which I would like to know
I am creating an iPhone app which I would like to have a similar
I am creating an iPhone webapp with a textbox and would like to change
I am creating an iphone app using Facebook api. Here I'm using the following
i am creating an iphone app for creating pdf. I am using the following
I have been following a tutorial on creating an iPhone app with multiple xibs.
I'm creating an iPhone app that includes .json files in the resource, but those
I'm creating an iPhone app in X-Code. I have downloaded the ASIHTTPRequest library to
I am creating an iPhone/iPad app for the app store. What I'd like to
I've been creating an iPhone App using Core Data. First of all, does it

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.