1

私はいくつかの文字列を取得しようとしている NSDictionary を持っています。辞書の名前はつぶやきと呼ばれます。次のようにして、ユーザー名とツイートを取得できます。

 NSDictionary *tweet = self.detailItem;
 NSString *username = [[tweet objectForKey:@"user"] objectForKey:@"name"];
 NSString *tweetText = [tweet objectForKey:@"text"];

取得した結果を NSLog にすると、username は「その人のユーザー名」で、tweetText は「その人のつぶやき」です。これらは両方とも、私が操作できる NSString です。

ただし、短縮されたものではなく、ツイートから実際の URL を取得する必要もあります。そのため、valueForKeyPath を使用して辞書で見つけました。これを文字列として必要とし、次のことを試しました。

NSString *url = [tweet valueForKeyPath:@"entities.urls.display_url"];

これも NSLog でき、適切な情報を取得できます。しかし、配列として出てくると思いますか?NSLog は次のようになります.. url は (「ここに url が入ります」) です。括弧と引用符付き。これは他のような文字列ではありません。valueForKeyPath が原因であると想定しています。url hasPrefix を使用しようとすると、それが気に入らず、配列で hasPrefix を持つことはできないと述べています。しかし、エンティティ、url、および display_url で複数の objectForKey を使用しようとしました。しかし、これはうまくいきません。エントリを文字列形式にする方法はありますか? 私はいくつかのSOの質問とウェブを見てきましたが、私にとって役立つものは何も見つかりません. どんな助けでも大歓迎です。御時間ありがとうございます

4

2 に答える 2

5

The keyPath entities.urls.display_url traverse an array of arrays and flattens that to return an array of display_urls. If you were confident that there would be only one url within that hierarchy you could use

NSString *url = [[tweet valueForKeyPath:@"entities.urls.display_url"] lastObject];

If there are multiple entities with URLs you may have to traverse the entities and urls to determine the URL in which you are interested. Or you may be able to use firstObject if what you are really looking for is entities.urls.[0].display_url

于 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」を取得することを期待していることだと思います(強調を追加)。ツイートには、1 つだけでなく、外部への任意の多くのリンクが含まれる場合があります。エンティティは、リンク、ハッシュタグなどの特別な意味を持つ文字の範囲を表します。したがって、単一の値ではなく配列になります。

于 2013-07-09T18:51:51.240 に答える