使用 RestKit 0.20 对集合进行自定义请求映射
Posted
技术标签:
【中文标题】使用 RestKit 0.20 对集合进行自定义请求映射【英文标题】:Custom request mapping on collection with RestKit 0.20 【发布时间】:2013-05-07 08:21:25 【问题描述】:我正在尝试找到一种将对象集合正确映射到具有特定格式的 JSON 字典的方法。
我有一个具有以下接口的对象(部分):
@interface Reward : NSObject
...
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* comment;
@property (nonatomic, strong) NSMutableOrderedSet* receivers; //set of User
...
@end
而用户对象(部分)是:
@interface User : NSManagedObject
...
@property (nonatomic, strong) NSNumber* userId
...
@end
目标是发布一个奖励对象以及 receivers 属性。
我可以想出一个适用于 title 和 comment 属性的 RKObjectMapping,但是 receivers 集合需要以下格式:
"receivers":"0":"<user_id_of_first_user>", "1":"<user_id_of_second_user>", ...
我的主要问题是如何将索引作为键插入。
我可以手动完成并调整 NSURLRequest HTTPBody,但我希望找到一种更干净/RestKit 的方式。
提前致谢。
【问题讨论】:
您正在寻找的输出不是我所说的 JSON 的干净使用,所以我认为实际上没有办法使用 RestKit 来实现。你需要自己做。出于兴趣,您为什么需要这种形式的 JSON? 感谢您的回复。我同意格式不标准的事实。最后,我可以让负责 API 的人对其进行修改以接受标准格式 "receivers":["id":"如果你想这样做,就像你说的那样,使用 NSMutableURLRequest 并添加你的奖励方法请求,它会为你的 json 提供 NSString 这个简单的代码可以帮助你和像我这样的其他开发人员:
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[RKObjectManager baseUrl]];
Reward *reward = [[Reward alloc] init];
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Reward class]];
RKResponseDescriptor *desc = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodPOST pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[manager addResponseDescriptor:desc];
RKObjectManager *objectManager = [RKObjectManager sharedManager];
NSMutableURLRequest *request =
[objectManager requestWithObject:reward method:RKRequestMethodPOST path:@"yourpath" parameters:nil];
NSString *str = [NSString stringWithFormat:@"\"receivers\":%@",reward.request];
[request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]];
RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[desc]];
[operation setCompletionBlockWithSuccess:success failure:failure];
operation.targetObject = reward;
[operation start];
希望对大家有帮助
【讨论】:
以上是关于使用 RestKit 0.20 对集合进行自定义请求映射的主要内容,如果未能解决你的问题,请参考以下文章
使用 RestKit 0.20 发布 - NSManagedObjectContext 问题