Restkit:迁移到0.20版本

4

我正试图迁移到RestKit 0.20-pre2版本。

目前,我已经成功地迁移了我的映射(至少编译器不再抱怨),但在创建请求方面遇到问题(之前我使用的 RKObjectLoader 现在已不再存在)。

我的旧代码如下:

- (RKObjectLoader*)objectLoaderWithResourcePath: (NSString*)resourcePath
                                     method: (RKRequestMethod)httpMethod
                                 parameters: (NSDictionary*)parameters
                              mappableClass: (Class)objectClass
{
RKObjectMapping *mapping = [self.objectManager.mappingProvider     objectMappingForClass:objectClass];

NSString *path = resourcePath;
if (httpMethod == RKRequestMethodGET) {
    path = [resourcePath stringByAppendingQueryParameters:parameters];
}
RKObjectLoader *request = [self.objectManager loaderWithResourcePath:path];
request.method = httpMethod;
request.delegate = self;
request.objectMapping = mapping;
if (httpMethod != RKRequestMethodGET) {
    request.params = parameters;
}

return request;
}

我使用以上方法创建一个通用请求,然后将其同步或异步发送。 现在...我看到了新的方法getObjectsAtPath:parameters:success:failure:,但是...我需要相同的POST方法(我没有任何对象要发布...只是服务器接受登录的POST请求..)。
有什么帮助吗?
谢谢。
2个回答

2
我和你一样也遇到了同样的问题,我在这里得到了一个很好的答案:Trying to make a POST request with RestKit and map the response to Core Data。基本上,你需要做以下几点:
 NSDictionary *dictionary = @{ @"firstParam": @(12345), @"secondParam": @"whatever"};
 NSMutableURLRequest *request = [objectManager requestWithObject:nil     method:RKRequestMethodPOST path:@"/whatever" parameters:parameters];

 RKObjectRequestOperation *operation = [objectManager  objectRequestOperationWithRequest:request ^(RKObjectRequestOperation *operation,     RKMappingResult *result) {
NSLog(@"Loading mapping result: %@", result);
  } failure:nil];

在README的“Managed Object Request”部分有一个示例,可以帮助你:

https://github.com/RestKit/RestKit


谢谢!我通过使用AFNetworking URL请求函数暂时解决了问题,但是你的答案才是我真正需要的!我以为我必须像在POST方法中一样使用对象参数,但现在我知道它可以保持为空!谢谢。 - Francesco

1
您可以直接使用RK HTTPClient子类来使用AFNetworking,就像这样:
[[RKObjectManager sharedManager].HTTPClient postPath:@"/auth" parameters:params success:^(AFHTTPRequestOperation *operation, id JSON)
 {
     // Success
 } failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {
     // Error
 }];

自从 RestKit v0.20.x 版本开始,RK 现在使用 AFNetworking 代替 RKClient,因此您可以直接参考 AFNetworking 文档:

http://afnetworking.github.com/AFNetworking/Classes/AFHTTPClient.html#//api/name/postPath:parameters:success:failure:

编辑

在我的项目中,为了进行身份验证,我简单地创建了一个名为User的NSObject,并使用单例模式进行管理和映射。我(个人认为)不需要将我的身份验证用户放入核心数据堆栈中。如果您需要使用RK Core数据映射功能,请查看具有postObject:path:parameters:success:failure:方法的RKObjectManager。


但是...我也需要映射...我的post操作的结果是一个用户对象...对此有什么提示吗? - Francesco
我会考虑“手动映射”的用户对象。之所以我还没有这样做是因为应用程序中有很多用户,“登录”用户只是其中之一...顺便说一下:postObject:path:etc..需要一个对象(不能为nil)...那么,如果我想检索它,我该使用哪个对象? - Francesco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接