无法从 NSMutableDictionary iOS 应用程序中检索 XMPP JID。

Posted

技术标签:

【中文标题】无法从 NSMutableDictionary iOS 应用程序中检索 XMPP JID。【英文标题】:Can't retrieve XMPP JID from NSMutableDictionary iOS app. 【发布时间】:2013-11-30 08:12:46 【问题描述】:

当我在应用程序中收到 XMPP Presence 时,我将其内容添加到 NSMutableDictionary 以将其发送到另一个 ViewController。如果我使用 NSLog 查看这本字典的内容,我可以看到一切正常.但是当我从另一个ViewController 访问这个NSMutableDictionary 时,我找不到JID。其余的东西都存储得很好。

这就是我在存储 XMPP Presence 内容(即 JID 和名称)时所做的事情。

 - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
 
     NSString *fromUser = [[presence from]user];      //name of user
     NSString *fromUserJID = [NSString stringWithFormat:@"%@",[presence from]] ;
     NSLog(@"presence from user JID :- %@", fromUserJID);   // This shows the JID.

      [_locationDictionary setObject:fromUser forKey:@"fromUser"];
      [_locationDictionary setObject:fromUserJID forKey:@"fromJID"];
      NSLog(@"locationary dictionary :- %@",_locationDictionary );  // This shows name as well as JID.

       // add to array
    [_presenceArray addObject:_locationDictionary];

现在,当我尝试在另一个 ViewController 中访问它时,我会这样做:-

    NSString *str=view.annotation.title;        //This has the name of the user.
    NSLog(@"annotation title :- %@", str);      
   for (NSDictionary *obj in appDelegate.presenceArray)
   
       NSString *titleString = [obj objectForKey:@"fromUser"];

       if ([str isEqualToString:titleString])                 //for the same username I need the JID
       
           NSString *jidString = [obj objectForKey:@"fromJID"];
           [ dict setObject:jidString forKey:@"jid"];      //dict is NSMutableDictionary

           NSLog(@"retrieved jid is :- %@", dict); // THIS IS NULL

【问题讨论】:

jidString 有一些价值还是没有?你初始化你的字典了吗? 你在哪里初始化你的“dict”? dict 被初始化,在 ViewDidLoad 中 【参考方案1】:

[presence from] 将给出 NSObject 类型的 XMPPJid。

XMPPJID *jid = [presence from];

尝试这样获取jid字符串

NSString *fromUserJID = [[presence from] full];//Will give Jid have user, resource, domain

//OR

NSString *fromUserJID = [presence fromStr]; //Only give Jid of user.

【讨论】:

以上是关于无法从 NSMutableDictionary iOS 应用程序中检索 XMPP JID。的主要内容,如果未能解决你的问题,请参考以下文章

ios Chromecast 发件人:[NSMutableDictionary gck_loadFromCacheWithName:]:无法识别的选择器发送到类 0x1133f1678

无法更新 NSMutableDictionary?

从 plist 读取字典后无法编辑字典

NSDictionary 可能无法响应 NSMutableDictionary 对象上的 setObject:forKey

无法将“NSMutableDictionary”类型的值转换为预期的参数类型“[String: AnyObject]?”

无法将类型“NSMutableDictionary”的值转换为强制类型“[NSObject: AnyObject]”以用于 google ios Analytics