RestKit 0.2,有多种方式可以进行GET,POST,PUT请求

Gen*_*ain 11 ios restkit restkit-0.20

我对使用restkit的方式感到有些困惑,似乎有多种方法可以做同样的事情,在我满足之前只是弄乱它直到它工作,但现在他已经改变了框架和使用在0.20 .x,我花了很多时间来转换我的代码,现在花费更多的时间试图让它像以前一样工作.我已经仔细研究了一些例子和那些人们声称为他们工作的例子,对我来说没那么多,所以某处肯定会有所不同,所以也许有人可以告诉我以下方面的不同之处得到这个数据至少例如1和2(失败,但这是关于restkit github的问题)

response.body={
"player": [
 {
  "_id": "50585c86ded998e77a000002"
 }
]
}
Run Code Online (Sandbox Code Playgroud)

1.

[[RKObjectManager sharedManager].router.routeSet addRoute:[RKRoute routeWithClass:[Player class] pathPattern:@"player/fbid/:fID" method:RKRequestMethodGET]];
Run Code Online (Sandbox Code Playgroud)

为了得到你的播放器,这样的事情:

Player *player = [Player new];
player.playerID = 2;
[[RKObjectManager sharedManager] getObject:player path:nil parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result) 
{
// Request 
} failure:nil];
Run Code Online (Sandbox Code Playgroud)

2.

使用响应描述符就像这样.

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor  responseDescriptorWithMapping:playerWtfMappingIn pathPattern:nil keyPath:@"player" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor];

[tempPlayer setFbID:[result objectForKey:@"id"]];

[objectManager getObject:tempPlayer path:nil parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{

}
failure:nil];
Run Code Online (Sandbox Code Playgroud)

3.

或者实际上在RestKit维基上自行解雇

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:articleMapping pathPattern:nil keyPath:@"articles" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

NSURL URL = [NSURL URLWithString:@"http://restkit.org/articles"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];
[objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    RKLogInfo(@"Load collection of Articles: %@", objects);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    RKLogError(@"Operation failed with error: %@", error);
}];

[objectRequestOperation start];
Run Code Online (Sandbox Code Playgroud)

我相信还有很多其他的方法,我怀疑是否有人可以确认你应该设置你的路径的方式以及你是否使用一种方法而不是另一种方法是由你想要映射的数据集以及它的格式决定的.然后,它的一些看起来像是完全相同的不同方式?谢谢

all*_*ire 5

两种方式都是正确的.实际上,第一个更好,因为它将所有配置集中在RKObjectManager中.对于基于RestKit的项目,我强烈建议您使用ObjectManager方式:)

您甚至可以更进一步,开始使用路由来保持代码清洁,请参阅有关该部分的wiki :)

希望能帮助到你