1

这是我第一次使用 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 } }

如何检查该状态属性?

4

1 回答 1

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 中删除的任何键都不会进入对象映射器。

于 2012-11-07T15:36:20.510 回答