3

由于我不知道如何为同一个类设置两个不同的 POST 资源路径,我尝试手动创建 RKObjectLoader 请求,但它似乎继续发送 GET 请求而不是 POST,即使我已将方法设置为邮政。这是我的代码

User *user = [[User alloc] init];
user.uname = uname;
user.pwd = pwd;


RKObjectManager *svc = [RKObjectManager sharedManager];
RKObjectMapping* mapping = [svc.mappingProvider objectMappingForClass:[User class]];

// what I was using before I needed two post resource paths//[svc postObject:user mapResponseWith:mapping delegate:self];

RKObjectLoader *loader = [svc loadObjectsAtResourcePath:authResourcePath objectMapping:mapping delegate:self];
[loader setMethod:RKRequestMethodPOST];
loader.userData = [NSNumber numberWithInt:RequestLogin];
loader.params = [NSDictionary dictionaryWithObjectsAndKeys:
                       uname, @"uname",
                       pwd, @"pwd",
                       nil];



[loader setSourceObject:user];
[loader send];
[user release];
4

2 回答 2

6

如果您有多个 POST 或 PUT 路径,最简单的做法是使用 postObject: 的块形式调用并自己指定目标资源路径:

[[RKObjectManager sharedManager] postObject:foo delegate:bar block:^(RKObjectLoader *loader) {
    loader.resourcePath = @"/my/destinationPath";
}];      

我们可能会在某个时候引入一个命名路由概念,让您可以使用名称来消除路由的歧义,但目前它纯粹基于 HTTP 动词。

请注意,您没有也不能在路由器上注册辅助路径——您完全避开了辅助路径。

于 2011-09-21T14:14:37.667 回答
4

为了完成 Blake Watters 的回答,如果不同的路线需要不同的 objectMapping,您需要执行以下操作:

[[RKObjectManager sharedManager] postObject:query delegate:saveJobQueryHandler block:^(RKObjectLoader* loader) {
    loader.objectMapping = NEW_MAPPING;
    loader.resourcePath = @"/other/url";
    loader.targetObject = nil;  // Important
}];

有关 loader.targetObject = nil 的更多信息;读取sendObject:delegate:block:

于 2012-02-14T07:36:03.757 回答