2017-09-16 7 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) 

이 방법과 TWTRUser 객체를 초기화 :이 클래스의 객체를 초기화하려면, 당신은이 같은 JSON 사전을 사용하는 생성자를 사용할 수 있습니다.

아이디 속성
이름 속성
ScreenName이 속성
:

문제는 TWTRUser는 JSON 반환에있는 모든 속성을하지 않는다는 것입니다, 그것은 단지 documentation에 나열된 이러한 속성을 가지고 는 재산
isProtected 재산
profileImageURL 속성
,536,913,632을 isVerified 10 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)를 오버라이드 (override) 사전이 원하는 값을 포함하는 경우, 거기에 당신이 볼 수에 추가 그 물체.

그런 다음 TWTRUser 클래스의 다른 속성과 마찬가지로 해당 속성에 액세스 할 수 있습니다.