2017-09-16 8 views
0

私はthis APIを使用してユーザーのフォロワーリストを取得し、そのフォロワーをドキュメントの説明に従ってJSON形式で返します。ここで返されたオブジェクトの抜粋です:あなたが気付いたようTwitterKitを使用してユーザーの完全な情報を取得する

{ 
    "users": [ 
    { 
     "id": 2960784075, 
     "id_str": "2960784075", 
     "name": "Jesus Rafael Abreu M", 
     "screen_name": "chuomaraver", 
     "location": "", 
     "profile_location": null, 
     "url": null, 
     "description": "", 
     "protected": false, 
     "followers_count": 1, 
     "friends_count": 101, 
     "listed_count": 0, 
     "created_at": "Sun Jan 04 19:58:06 +0000 2015", 
     ..... 
     ..... 
     "default_profile": true, 
     "default_profile_image": false, 
     "following": false, 
     "follow_request_sent": false, 
     "notifications": false, 
     "muting": false 
    }, 
    ..... 
    ..... 
], 
    "next_cursor": 1489467234237774933, 
    "next_cursor_str": "1489467234237774933", 
    "previous_cursor": 0, 
    "previous_cursor_str": "0" 
} 

は、ユーザーオブジェクトは、プロパティをたくさん持っている、と私はそれらを一つずつ解析 したいかのためにそれを行うためにライブラリを使用していません私。

TwitterKitにはTWTRUserという名前のクラスがあり、ここにはdocumentationがあります。このクラスのオブジェクトを初期化するには、ちょうどこのようなJSON辞書を取るコンストラクタ使用することができます。

let follower = TWTRUser(jsonDictionary: jsonDictionary) 

を、私は私に返されるJSONオブジェクトを取得することができます。この方法では、解析され、TWTRUserオブジェクトを初期化します。

問題は、JSONに記載されているすべてのプロパティが返されてきたdocumentationに記載されているようTWTRUserが、それだけでこれらの性質を持っていないということです。

ユーザーIDプロパティ
nameプロパティ
スクリーンネームプロパティ
は プロパティ
isProtectedプロパティをisVerified
profileImageURLプロパティ
profileImageMiniURLプロパティ
profileImageLargeURLプロパティ
私はそれがこのような値のキーを取得して返すvalueForKeyメソッドを使用しようとした

formattedScreenNameプロパティ
profileURLプロパティ:

let createdAt = follower.value(forKey: "created_at") 

私はそれを考えましたしかし、それはうまくいきませんでした。私は、アプリケーションがクラッシュし、それを使用して、私に次のメッセージ与えた場合:

がキャッチされない例外により「NSUnknownKeyException」にアプリを終了し、 理由:「[valueForUndefinedKeyは:]:このクラス は、キー値コーディング準拠のためではありませんcontributors_enabledキー。

TWTRUserクラスを使用してすべてのユーザーのプロパティを取得するにはどうすればよいですか?

+0

試したコードを表示しますか? –

+0

'contributors_enabled'を使用したところ –

+0

@AbhishekJain私はTWTRUserの* valueForKey *メソッドを使用しようとしましたが、私は本来の方法でJSONを解析するか、ライブラリを使用することができますが、別の解決策を探す。 –

答えて

2

value(forKey:)は、NSObjectに継承されたメソッドで、Key-Value Codingに使用されているため、JSONの結果は返されません。 TWTRUserクラスは10個のプロパティしか定義していません。あなたが他のプロパティを取得したい場合、あなたはそれがすでに述べているように、すべての

let user = try JSONSerialization.jsonObject(with: jsonDictionary) as? [String: Any] 
1

まず、(標準ライブラリを使用して)次のコード行でJSONを自分で解析しなければならない、value(for key)を使用していませんそのオブジェクトがその価値を持っていれば、それはおそらく公共の財産を通じて公開されるでしょう。

私の提案は、あなたの新しいクラスに必要なプロパティを追加し、TWTRUserをサブクラス化することです(あなたはそれをTwitterUserような何かを呼び出すことができます)とinit(json)をオーバーライドする辞書が必要な値が含まれている場合、そこにあなたが見ることができるし、それらを追加オブジェクト。

その後、TWTRUserクラスの他のプロパティと同様に、そのプロパティにアクセスできます。

関連する問題