gpt4 book ai didi

ios - restkit 映射和验证响应

转载 作者:行者123 更新时间:2023-11-29 13:25:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com