我有一个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时,它不喜欢这样,并提到您不能将andPrefix与and数组一起使用。但是我也尝试将多个objectForKey与实体,URL和display_url一起使用。但这是行不通的。有什么办法可以将我的输入内容转换为字符串格式。我已经在网络上查看了一些SO问题,但是找不到对我有用的任何东西。任何帮助将不胜感激。谢谢你的时间
最佳答案
对于Twitter's documentation on entities,entities
是字典,urls
是字典数组。
当执行... valueForKeyPath:@"entities.urls.display_url"]
时,您将执行与... valueForKey:@"entities"] valueForKey:@"urls] valueForKey:@"display_url"]
相同的操作。
对于 NSDictionary
's documentation,如果所讨论的键不是以@开头,则它的valueForKey:
返回与objectForKey:
相同的内容。
因此,entities
的valueForKeyPath:
部分返回一个对象数组。
对于 NSArray
's documentation,其valueForKey:
返回一个数组,该数组由分别对数组中每个对象调用valueForKey:
的结果组成。
鉴于entities
数组中的每件事都是一个字典,因此您得到的是推文中每个实体的display_url
键的数组。
因此,我认为您的问题是您希望获得“来自tweet的实际URL”(添加了重点)。推文可能包含任意多个向外的链接,而不仅仅是一个链接-实体代表具有特殊含义的字符范围,例如链接,主题标签等。因此,您最终得到的是数组而不是单个值。
关于ios - objective-c 将NSDictionary valueForKeyPath转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555410/