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函数

将Swift类导入Objective c [复制]

将方法从 Objective C 转换为 Swift

将按钮禁用为灰色-Objective C

Objective C 将 int 转换为 NSString (iPhone)

Objective c 将图像保存到图库