Objective C 将 NSDictionary valueForKeyPath 转换为字符串

Dou*_*las 1 nsdictionary nsstring ios

我有一个 NSDictionary,我想从中取出一些字符串。字典的名字叫做推文。我可以通过执行以下操作来获取用户名和推文。

 NSDictionary *tweet = self.detailItem;
 NSString *username = [[tweet objectForKey:@"user"] objectForKey:@"name"];
 NSString *tweetText = [tweet objectForKey:@"text"];
Run Code Online (Sandbox Code Playgroud)

如果我 NSLog 我得到的结果;用户名是“人的用户名”,tweetText 是“人的推文”。这些都是我可以操作的 NSString。

但是,我还需要从推文中获取实际 URL,而不是缩短的 URL。所以我在字典中找到了 valueForKeyPath。我需要它作为一个字符串并尝试了以下操作。

NSString *url = [tweet valueForKeyPath:@"entities.urls.display_url"];
Run Code Online (Sandbox Code Playgroud)

我也可以 NSLog 并获得正确的信息。但我认为它是一个数组?NSLog 看起来像这样.. url 是(“url 到这里”)。用括号和引号。这与其他字符串不同。我假设这是因为 valueForKeyPath。当我尝试使用 url hasPrefix 时,它不喜欢那样,并提到您不能将 hasPrefix 与数组一起使用。但我也尝试将多个 objectForKey 与实体、url 和 display_url 一起使用。但这不起作用。有什么方法可以让我输入字符串格式。我查看了一些 SO 问题和网络,但找不到任何对我有用的东西。任何帮助将不胜感激。谢谢你的时间

小智 5

keyPath entity.urls.display_url 遍历一个数组数组并将其展平以返回一个 display_urls 数组。如果您确信该层次结构中只有一个 url,您可以使用

NSString *url = [[tweet valueForKeyPath:@"entities.urls.display_url"] lastObject];
Run Code Online (Sandbox Code Playgroud)

如果有多个具有 URL 的实体,您可能必须遍历实体和 url 以确定您感兴趣的 URL。或者,如果您真正要寻找的是 entity.urls.[0].display_url,您也可以使用 firstObject