Objective c RestKit 0.2返回一个对象数组,而不是一个对象
我正在使用Restkit版本0.2将JSON结果映射到Objective-C对象。接收到的JSON如下所示:Objective c RestKit 0.2返回一个对象数组,而不是一个对象,objective-c,restkit,Objective C,Restkit,我正在使用Restkit版本0.2将JSON结果映射到Objective-C对象。接收到的JSON如下所示: { "result": { "errorCode": 0, "errorMsg": "ok", "data": { "orderitems": [ { "id": "46", "o_order_id": "15", "p_prod
{
"result": {
"errorCode": 0,
"errorMsg": "ok",
"data": {
"orderitems": [
{
"id": "46",
"o_order_id": "15",
"p_product_id": "7",
"t_event_id": "1",
"quantity": "1",
"price": "4.5",
"name": "Name1",
"unit": "something1",
"image": "images/7.png"
},
{
"id": "47",
"o_order_id": "15",
"p_product_id": "10",
"t_event_id": "1",
"quantity": "1",
"price": "3.99",
"name": "Name2",
"unit": "something2",
"image": "images/10.png"
}
]
}
}
}
@interface TakeOrderResult : NSObject
@property (strong, nonatomic) NSNumber *errorCode;
@property (strong, nonatomic) NSString *errorMessage;
@property (strong, nonatomic) NSSet *orderitems;
@end
我定义了以下映射:
RKObjectMapping *oiMapping = [RKObjectMapping mappingForClass:[OrderItem class]];
[oiMapping mapKeyPathsToAttributes:@"p_product_id", @"productID", @"name", @"name", @"t_event_id", @"eventID", @"quantity", @"quantity", nil];
[objectManager.mappingProvider setMapping:oiMapping forKeyPath:@"result.data.orderitems"];
RKObjectMapping *takeOrderResultMapping = [RKObjectMapping mappingForClass:[TakeOrderResult class]];
[takeOrderResultMapping mapKeyPathsToAttributes:@"errorCode", @"errorCode", @"errorMsg", @"errorMessage", nil];
[takeOrderResultMapping mapRelationship:@"orderitems" withMapping:oiMapping];
[objectManager.mappingProvider setMapping:takeOrderResultMapping forKeyPath:@"result"];
takeOrderResultMapping.rootKeyPath = @"result";
[[RKObjectManager sharedManager].mappingProvider setErrorMapping:takeOrderResultMapping];
最后,TakeOrderResult类的定义如下:
{
"result": {
"errorCode": 0,
"errorMsg": "ok",
"data": {
"orderitems": [
{
"id": "46",
"o_order_id": "15",
"p_product_id": "7",
"t_event_id": "1",
"quantity": "1",
"price": "4.5",
"name": "Name1",
"unit": "something1",
"image": "images/7.png"
},
{
"id": "47",
"o_order_id": "15",
"p_product_id": "10",
"t_event_id": "1",
"quantity": "1",
"price": "3.99",
"name": "Name2",
"unit": "something2",
"image": "images/10.png"
}
]
}
}
}
@interface TakeOrderResult : NSObject
@property (strong, nonatomic) NSNumber *errorCode;
@property (strong, nonatomic) NSString *errorMessage;
@property (strong, nonatomic) NSSet *orderitems;
@end
这或多或少是可行的——然而,Restkit返回的是一个由3个对象组成的数组。第一个对象是TakeOrderResult的实例,其集合为空“orderitems”。接下来的两个对象是OrderItems的实例
如果有人能帮我指出为什么我没有得到1个对象,即TakeOrderResult的一个实例,其中“orderitems”是由两个对象/两个orderitems组成的集合,那就太好了。您的映射有点不正确。 获得3个对象的原因是将这两个映射添加到映射提供程序。 “orderitems”是一个空集的原因是它不知道如何查找orderitems 我不知道它是否有效,但我会尝试以下方法。 不要将oiMapping添加到映射提供程序。 而不是: [takeOrderResultMapping映射关系:@“orderitems”与映射:oiMapping] 尝试:
[takeOrderResultMapping addRelationshipMappingWithSourceKeyPath:@“data.orderitems”映射:oiMapping] 您的映射稍有偏差。 获得3个对象的原因是将这两个映射添加到映射提供程序。 “orderitems”是一个空集的原因是它不知道如何查找orderitems 我不知道它是否有效,但我会尝试以下方法。 不要将oiMapping添加到映射提供程序。 而不是: [takeOrderResultMapping映射关系:@“orderitems”与映射:oiMapping] 尝试: [takeOrderResultMapping addRelationshipMappingWithSourceKeyPath:@“data.orderitems”映射:oiMapping]