restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)
Posted
技术标签:
【中文标题】restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)【英文标题】:restkit mapping nested array is empty (nested restkit request with json response) 【发布时间】:2014-11-09 23:52:15 【问题描述】:我在这里做了什么奇怪的事情吗?
我的类别被下载和映射,
产品也会按照日志记录的方式被下载和映射,
但我的产品在每个类别下都是空的, 谢谢!
"productsCategories" : [
"product" : [
"price" : 3.99,
"title" : "Product A"
,
"price" : 3.99,
"title" : "ProductB "
],
"categoryTitle" : “a category“
]
RKObjectMapping *productCategoryMapping = [RKObjectMapping mappingForClass:[ProductCategory class]];
[productCategoryMapping addAttributeMappingsFromDictionary:@
@"categoryTitle": @"tit"
];
RKObjectMapping* productMapping = [RKObjectMapping mappingForClass:[Product class] ];
[productMapping addAttributeMappingsFromDictionary:@
@"title": @"tit",
@"price": @"prc"
];
[productCategoryMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"product"
toKeyPath:@"product"
withMapping:productMapping]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:productCategoryMapping method:RKRequestMethodPOST pathPattern:@"productByCategory" keyPath:@"productsCategories" statusCodes:[NSIndexSet indexSetWithIndex:200]];
NSURL *url=[NSURL URLWithString:@"http://www.example.com/REST/v2/"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:url];
[manager addResponseDescriptor:responseDescriptor];
NSMutableDictionary *mutableParameters = [NSMutableDictionary dictionary];
[mutableParameters setValue:@"1" forKey:@"id"];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:productCategoryMapping method:RKRequestMethodPOST pathPattern:@"productByCategory" keyPath:@"productsCategories" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];
[manager postObject:request path:@"productByCategory" parameters:mutableParameters success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
self.productCategoryArr=result.array;
[self.tblDetails reloadData];
failure:^(RKObjectRequestOperation *operation, NSError *error)
RKLogError(@"Operation failed with error: %@", error);
self.productCategoryArr=nil;
];
日志显示正在为每个产品映射对象,但我只得到
ProductCategory: 0x7bf53510
ProductCategory: 0x7be57f00
每个数组和 0 个对象
【问题讨论】:
您需要提供更多信息。将description
方法实现添加到ProductCategory
和Product
,以便日志告诉您它们包含的内容。打开跟踪日志并提供一些详细信息。展示您如何测试数组是否为空,并展示准确的 JSON,它会产生您描述的 2 个ProductCategory
实例的结果。
【参考方案1】:
假设您的 ProductCategory 类有
NSArray *Product
NSString * tit
创建一个***的 RKObjectMapping 类,
RKObjectMapping * ProductCategoryResponseMapping = [RKObjectMapping mappingForClass: [ProductCategoryResponse class]];
[ProductCategoryResponseMapping addAttributeMappingsFromDictionary:@
@"productsCategories": @"productsCategories"
];
并创建应该具有的新类 ProductCategoryResponse
NSArray * productsCategories
使用 ProductCategoryResponseMapping 作为响应描述符。
现在您的响应将包含 productsCategories 数组,每个都有 Products 数组和 String tit。
【讨论】:
谢谢你的回答 Fahad,我按照你的建议做了,它可以工作,但对象仍然是空的 :( 这不是必需的,因为响应描述符的关键路径在 JSON 中超过了这个级别。 这是我的 json 输入字符串的整数类型转换问题,它编辑它,thnx 反正!以上是关于restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)的主要内容,如果未能解决你的问题,请参考以下文章