2013-07-09 3 views
1

내 JSON 응답이처럼 보이는 (편안하고 정말 좋은되지 않음) JSON 응답에서 여러 Entites 매핑 : 정말RestKit -

{ 
    "enabled": false, 
    "number_of_articles": 20, 
    "new_users": [ 
    { 
     "id": "5001", 
     "name": "Jimmy Valner" 
    }, 
    ], 
    "articles" : [ 
    { 
    "id" : 33122, 
    "title" : "Something", 
    "authors": [ 
     { 
      "id": "511", 
      "name": "Somebody" 
     }, 
     { 
      "id": "51", 
      "name": "Somebody else" 
     } 
    }] 
} 

아니 내가 알고 적절한 편안하고 응답. 하지만 어떻게 든 다른 두 엔티티 (사용자 및 조항)에 매핑해야합니다. 이미 기사 부분에 대한 작업 코드가 있습니다. Article과 Articles를 관계로 매핑합니다. 나는 이런 식으로 일을 해요 : 예상대로이가 작동

RKMapping *mapping = [MappingProvider articlesMapping]; 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor 
              responseDescriptorWithMapping:mapping 
              pathPattern:@"/articles/:userId/latest" 
              keyPath:@"articles" 
              statusCodes:statusCodeSet]; 
NSURLRequest *request = [[RKObjectManager sharedManager] requestWithObject:nil 
                method:RKRequestMethodGET 
                path:[NSString stringWithFormat:@"/articles/%@/latest", [[CredentialStore sharedInstance] userId]] 
               parameters:nil]; 

RKManagedObjectStore *store = [[DataModel sharedDataModel] objectStore]; 

RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request 
                    responseDescriptors:@[responseDescriptor]]; 
operation.managedObjectCache = store.managedObjectCache; 
operation.managedObjectContext = store.mainQueueManagedObjectContext; 

[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    NSLog(@"%@", mappingResult.array); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"ERROR: %@", error); 
    NSLog(@"Response: %@", operation.HTTPRequestOperation.responseString); 
}]; 
[operation start]; 

. 나는 + (RKMapping *)articlesMapping 방법으로 매핑 지침을 제공한다. JSON 응답의 작성자 부분조차도 올바르게 매핑됩니다.

이제 new_users 배열을 다른 엔티티 (사용자 분명히)에 매핑하고 싶습니다. 서버에 다른 요청을하지 않으면 어떻게 할 수 있습니까? 나는 또 다른 RKManagedObjectRequestOperation *operation을 만들면서 약간의 성공을 거두었지만, 당연히 피하려고하는 다른 네트워크 요청을 서버로 촉발시킵니다. RKObjectManager에서 해결책을 찾아야할까요? 아니면 어떻게해도 루트 수준에서 시작하기 위해 keyPath를 변경해야하고 + (RKMapping *) 메서드 (아마도 그렇지 않음)의 다른 엔터티에 대한 매핑을 수행해야합니까?

다른 질문.이 JSON에서 enabled, number_of_articles 속성에 액세스하려면 어떻게해야합니까? 다시 말하지만, 나는 구조적으로 구성된 편안한 응답을 다루지는 않지만 어떻게 든 처리해야합니다. 이 속성에 어떻게 든 액세스하고 싶습니다 ... 엔티티에 대한 매핑이 필요하지 않습니다.

답변

4

RKManagedObjectRequestOperation은 이유는 initWithRequest:responseDescriptors:입니다. 특히 responseDescriptors에있는 's'와 배열을 전달한다는 사실에 유의하십시오. 즉, 동일한 경로 패턴을 사용하지만 키 경로가 다른 여러 응답 설명자를 구성 할 수 있으며 RestKit은 서버에서 수신 한 응답에 대해 각각을 처리합니다.

이렇게 할 때 목록의 모든 최상위 항목이 포함되어 있기 때문에 NSLog(@"%@", mappingResult.array);을 변경하려고합니다. 대신, 아마도 사용해야합니다 NSLog(@"%@", mappingResult.dictionary);

+0

감사합니다! 나는 정말로 그것을 놓쳤다 :). – digitaljerry