Objective C 将 NSDictionary valueForKeyPath 转换为字符串
Posted
技术标签:
【中文标题】Objective C 将 NSDictionary valueForKeyPath 转换为字符串【英文标题】:Objective C converting NSDictionary valueForKeyPath into a string 【发布时间】:2013-07-09 18:18:52 【问题描述】:我有一个 NSDictionary,我试图从中提取一些字符串。字典的名称称为推文。我可以通过执行以下操作来获取用户名和推文。
NSDictionary *tweet = self.detailItem;
NSString *username = [[tweet objectForKey:@"user"] objectForKey:@"name"];
NSString *tweetText = [tweet objectForKey:@"text"];
如果我 NSLog 我得到的结果; username 是“人的用户名”,而 tweetText 是“人的推文”。这些都是我可以操作的 NSString。
但是,我还需要从推文中获取实际 URL,而不是缩短后的 URL。所以我在字典中用 valueForKeyPath 找到了它。我需要这个作为字符串并尝试了以下方法。
NSString *url = [tweet valueForKeyPath:@"entities.urls.display_url"];
我也可以 NSLog 来获取正确的信息。但我认为它是作为一个数组出现的? NSLog 看起来像这样.. url 是(“url 到这里”)。带括号和引号。这与其他字符串不同。我假设这是因为 valueForKeyPath。当我尝试使用 url hasPrefix 时,它不喜欢这样,并提到您不能将 hasPrefix 与数组一起使用。但我也尝试将多个 objectForKey 与实体、url 和 display_url 一起使用。但这不起作用。有什么方法可以让我输入字符串格式。我在网上查看了一些 SO 问题,但找不到任何对我有用的东西。任何帮助将不胜感激。感谢您的宝贵时间
【问题讨论】:
您可以通过将 [url class] 转储到 NSLog 中的 %@ 来确定类型。在 XCode 或 Appcode 中使用带有断点的调试器。它会很容易地揭示你的字典的结构。 @NickWeaver,感谢您的帮助。我刚做了这个,是的,它是一个数组。 【参考方案1】:keyPath entity.urls.display_url 遍历一个数组数组并将其展平以返回一个 display_urls 数组。如果您确信该层次结构中只有一个 url,您可以使用
NSString *url = [[tweet valueForKeyPath:@"entities.urls.display_url"] lastObject];
如果有多个实体的 URL,您可能必须遍历实体和 url 以确定您感兴趣的 URL。或者,如果您真正要查找的是 entity.urls.[0].display_url
,则您可以使用 firstObject【讨论】:
KHansenSF,感谢您的宝贵时间。我最终使用了数组形式并将其转换为字符串。不过,我也会试试你的!谢谢。【参考方案2】:根据Twitter's documentation on entities,entities
是一个字典,urls
是一个字典数组。
当您执行... valueForKeyPath:@"entities.urls.display_url"]
时,您将执行与... valueForKey:@"entities"] valueForKey:@"urls] valueForKey:@"display_url"]
相同的操作。
根据NSDictionary
's documentation,它的valueForKey:
返回与objectForKey:
相同的内容,如果——在这种情况下——有问题的键不以@ 开头。
所以valueForKeyPath:
的entities
部分返回一个对象数组。
对于NSArray
's documentation,其valueForKey:
返回一个数组,该数组由对数组中的每个对象单独调用valueForKey:
的结果组成。
鉴于entities
数组中的每个事物都是一个字典,因此您得到的是推文中每个实体的display_url
键数组。
所以我认为您的问题是您希望从推文中获得“ 实际 URL”(强调添加)。推文可能包含任意多个外部链接,而不仅仅是一个——实体代表具有特殊含义的字符范围,如链接、主题标签等。所以你最终得到一个数组而不是单个值。
【讨论】:
汤米,非常感谢。把它作为一个数组,然后把它变成一个字符串。感谢您的宝贵时间!以上是关于Objective C 将 NSDictionary valueForKeyPath 转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
Objective C将数据发送到phonegap并调用javascript函数