2012-03-08 3 views
1

RestKit 0.9.4를 사용 중입니다. 개체의 특성에서 채워야하는 키가있는 JSON을 게시하고 싶습니다. 다음 JSON은 :iOS의 Restkit을 사용하여 JSON을 게시하기위한 키와 같은 동적 속성

{ 
    "types":[ { 
     "1" : "value1" 
    }, 
    { 
     "7" : "value2" 
    } ] 
} 

I 각각 키 타입 가치라는 2 명는 NSString 데이터 멤버와 목적이있다. keytype은 위의 중첩 된 json ("1", "7"등)의 키에 대해 나타나는 값을 갖는 변수입니다. mapKeyOfNestedDictionaryToAttribute은 동적 속성 (키로 사용됨)이 가장 안쪽에 있기 때문에 여기서는 작동하지 않습니다. RestKit을 사용하여 게시 할 수 있습니까?

답변

1

NSDictionary에서 구조를 만든 다음 RestKit을 사용하여 JSON으로 게시하는 방법은 다음과 같습니다. 또한 응답은 모델에 매핑됩니다.

// make the inner dictionaries (probably would use a for loop for this 
NSDictionary *dict1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"1", nil]; 
NSDictionary *dict7 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value2", @"7", nil]; 
// put them in an array 
NSArray *types = [[NSArray alloc] initWithObjects:dict1, dict7, nil]; 
// now put the array in a dictionary 
NSDictionary *finalDict = [[NSDictionary alloc] initWithObjectsAndKeys:types, @"types", nil]; 

// create a JSON string from your NSDictionary 
NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:finalDict 
                options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string 
                error:&error]; 
NSString *jsonString = [[NSString alloc] init]; 
if (!jsonData) { 
    NSLog(@"Got an error: %@", error); 
} else { 
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
} 

// make the post using the objectManager if you want to map the response to a model 
RKObjectManager* objectManager = [RKObjectManager sharedManager]; 
[objectManager loadObjectsAtResourcePath:@"/api/" delegate:self block:^(RKObjectLoader* loader) { 
    loader.serializationMIMEType = RKMIMETypeJSON; // We want to send this request as JSON 
    loader.objectMapping = [objectManager.mappingProvider objectMappingForClass:[Plan class]]; 
    loader.resourcePath = @"/api/"; 
    loader.method = RKRequestMethodPOST; 
    loader.params = [RKRequestSerialization serializationWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON]; 
}];