我一直在使用RestKit 0.10.0有一段时间了,并直到这一点,我只贴序列化对象到我的服务器:
[[RKObjectManager sharedManager] postObject:serializedObject
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
loader.serializationMIMEType = RKMIMETypeFormURLEncoded;
loader.targetObject = nil;
}];
到现在为止还挺好。 但是我现在需要做一个GET请求到服务器与几个查询参数。 这排在脑海的第一个自然不过的事,因为我没有为发布对象做同样的:
- 创建用于封装所述查询参数的对象序列化映射
- 创建从服务器接收的对象的响应映射
- 定义和使用路由器RKRequestMethodGET(而不是RKRequestMethodPOST)
- 使使用的getObject请求:usingBlock(代替postObject:usingBlock)
我很快就发现了,这是不这样做,那么搜索可用资源(后一路RestKit维基 , RestKit谷歌组 ),我现在才知道被视为有效的两种解决方案:
- 追加查询参数的资源路径。
这完美的作品。
NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
token, @"accessToken",
[NSNumber numberWithInt:level], @"level",
[NSNumber numberWithInt:count], @"count",
nil];
NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH stringByAppendingQueryParameters:queryParams];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
}];
- 设置在装载块中的查询参数。
这不会发送的查询参数。
RKParams *params = [RKParams params];
[params setValue:token forParam:@"accessToken"];
[params setValue:[NSNumber numberWithInt:level] forParam:@"level"];
[params setValue:[NSNumber numberWithInt:count] forParam:@"count"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:PEER_SUGGESTIONS_CONTROLLER_PATH
usingBlock:^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = responseMapping;
loader.params = params;
}];
我的问题是:
- 为什么没有第二个解决方案的工作?
- 为什么工作,而不必设置loader.targetObject到零的第一个解决方案,虽然我没有在JSON响应的任何根密钥路径?
- 什么是我应该使用GetObject情况:usingBlock方法? 什么是预期目的?
- 我应该用什么loader.params呢? 从对象映射教程维基说,这个属性可以用来封装POST参数,但我不明白这一点,因为我可以在正在与方法postObject发送的序列化对象包装参数:usingBlock。
谢谢。
[以后编辑]
关于回答我的第二个问题:我一直在targetObject在装载机块进行POST请求时东阳否则RestKit会尝试使用发送对象映射为响应(选中该设置为零链接的相关讨论)。 但是,由于我使用loadObjectsAtResourcePath:usingBlock :,有不发送对象,因此响应将自然地映射所述响应映射而无需设定targetObject为nil。