假设我必须执行此动态PUT请求:"http://mydomain.com/api/5?value=66"
身体是空的。我将返回 201(已创建)状态,并在正文中返回一个 json 对象,我们称之为 MyObject,它有字段 NSNumber* Id, NSString* name;
现在在休息套件中,我有以下选择:
- [[RKObjectManager sharedManager] putObject:nil mapResponseWith:MyMapping delegate:self];
MyMapping 映射 MyObject。问题是,如果我发送 nil,它不知道映射并抛出"无法为 HTTP 方法'PUT'找到类型'(null)'对象的可路由路径"
- [[RKClient sharedClient] put:putUrl params:nil delegate:self];
哪里putUrl = "http://mydomain.com/api/5?value=66"
这里的问题是响应没有映射,所以只有 didLoadResponse 被回调,而 didLoadObjects 从未被调用
[objectManager.router routeClass:[MyObject class] toResourcePath:putUrl forMethod:RKRequestMethodPUT];
MyObject *obj = [[MyObject alloc] init];
[[RKObjectManager sharedManager] putObject:obj mapResponseWith:MyMapping delegate:self];
这里的问题是,首先我伪造了它(将MyObject作为参数发送,而它不是),它只是第一次工作。 我第二次尝试使用此方法时,我收到此异常:"已经为类'MyObject'和HTTP方法'PUT'注册了路由"
有什么建议怎么办?
谢谢
如果有人感兴趣,我在看到 restkit 正在做什么后找到了答案。
putUrl = "http://mydomain.com/api/5?value=66";
MyMapping maps the returned MyObject that has fields NSNumber* Id, NSString* name;
这是让它工作的代码:
void (^blockLoader)(RKObjectLoader *);
blockLoader = ^(RKObjectLoader *loader) {
loader.delegate = self;
loader.objectMapping = MyMapping;
};
NSString *resourcePath = putUrl;
[[RKObjectManager sharedManager] sendObject:nil toResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
loader.method = RKRequestMethodPUT;
blockLoader(loader);
}];