restkit映射和验证响应

时间:2012-11-07 15:27:29

标签: ios restkit

这是我第一次使用restkit,我对自动映射感兴趣(后来也可能与CoreData集成)。

目前,我设法执行GET请求,并使用以下代码将响应映射到一个简单对象:

RKObjectMapping *myMapping = [[self class] objectMappingForClass:[MyClass class]];
[myMapping mapKeyPath:@"Name" toAttribute:@"name"];
[myMapping mapKeyPath:@"Value" toAttribute:@"value"]; 

....

+ (RKObjectMapping*)objectMappingForClass: (Class)class
{
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:class];
mapping.rootKeyPath = @"Data";

mapping.performKeyValueValidation = NO;
//  mapping.ignoreUnknownKeyPaths = YES;
mapping.setNilForMissingRelationships = YES;
mapping.setDefaultValueForMissingAttributes = YES;

return mapping;
}

我以这种方式从服务器检索数据:

RKObjectMapping *defaultPropertiesMapping = [self.objectManager.mappingProvider objectMappingForClass:[MyClass class]];

RKObjectLoader *request = [self.objectManager loaderWithResourcePath:GetDefaultPropertiesURL];
request.objectMapping = defaultPropertiesMapping;

RKResponse *response = [request sendSynchronously];

问题是,对于响应,服务器不使用HTTP状态,而是使用JSON有效负载中的属性(有效负载类似于: { "Status" : "OK", "Data" : { //real payload } }

如何检查Status属性?

1 个答案:

答案 0 :(得分:1)

如果将对象加载器委托设置为要发送请求的类,则可以实现以下方法:

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout __autoreleasing id *)mappableData; {
  if([*mappableData valueForKey:@"Status"] isEqualToString:@"OK"){
    // Do something
  }
}

然后,您可以检查状态的值并相应地处理响应。在将对象映射到Core Data之前调用此方法。另外,请确保您的类采用RKObjectLoaderDelegate协议,否则将无效。

如果您想要从响应中删除数据,请使用以下方法:

[*mappableData removeObjectForKey:@"Data"];

从* mappableData中删除的任何键都不会进入对象映射器。