ios - restkit 映射和验证响应

标签 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": {//真实负载} }

如何检查 Status 属性?

最佳答案

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

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

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

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

[*mappableData removeObjectForKey:@"Data"];

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

关于ios - restkit 映射和验证响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272785/

相关文章:

ios - swift : take photo from AVFoundation

ios - iOS中的超链接识别

ios - pod install 无法添加源

ios - 处理 RestKit 响应以获取不在实体中的参数

ios - 跟踪 UITableViewCell 动态

iphone - 带有三个按钮的 iOS 推送通知警报

ios - 由RestKit解析JSON与单个字符串元素的列表

iphone - 对象映射 Restkit 不映射嵌套对象

ios - RestKit CoreData 一对多关系映射,To Many 部分不起作用

ios - 解析和 Xcode : Blocks won't autocomplete.