动态属性作为在 iOS 中使用 Restkit 发布 JSON 的关键
Posted
技术标签:
【中文标题】动态属性作为在 iOS 中使用 Restkit 发布 JSON 的关键【英文标题】:Dynamic attribute as key for posting a JSON using Restkit in iOS 【发布时间】:2012-03-08 06:44:10 【问题描述】:我正在使用 RestKit 0.9.4。我想发布一个 JSON,它有一个需要从对象属性填充的键。 JSON如下:
"types":[
"1" : "value1"
,
"7" : "value2"
]
我有一个对象,它有 2 个分别命名为 keytype 和 value 的 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];
];
【讨论】:
以上是关于动态属性作为在 iOS 中使用 Restkit 发布 JSON 的关键的主要内容,如果未能解决你的问题,请参考以下文章
RestKit 0.20:restkit 对象映射使属性映射加倍