1

我有一个 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 问题,但找不到任何对我有用的东西。任何帮助将不胜感激。谢谢你的时间

4

2 回答 2

5

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

于 2013-07-09T19:07:13.923 回答
4

根据Twitter 的有关实体的文档entities它是一个字典,并且urls是一个字典数组。

当你执行... valueForKeyPath:@"entities.urls.display_url"]你做同样的事情... valueForKey:@"entities"] valueForKey:@"urls] valueForKey:@"display_url"]

PerNSDictionary的文档,它valueForKey:返回的内容与objectForKey:在本例中一样 - 有问题的键不以 @ 开头。

所以entities部分valueForKeyPath:返回一个对象数组。

PerNSArray的文档,它valueForKey:返回一个数组,该数组由valueForKey:单独调用数组中的每个对象的结果组成。

鉴于数组中的每一件事都是一个字典,因此您得到的是推文中每个实体entities的键数组。display_url

所以我认为您的问题是您希望获得“来自推文的实际 URL”(强调添加)。推文可能包含任意多个外部链接,而不仅仅是一个——实体代表具有特殊含义的字符范围,如链接、主题标签等。所以你最终得到一个数组而不是单个值。

于 2013-07-09T18:51:51.240 回答