这是我第一次使用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属性?
答案 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中删除的任何键都不会进入对象映射器。