【发布时间】:2014-02-03 21:29:01
【问题描述】:
我正在开发一个由 (Rails) REST API(支持浅路由)支持的 CoreData iOS 应用。因为图中有很多对象,我希望 REST GET 不包含很多嵌套结果,而是只包含 RestKit 用来建立(错误)关系的引用。然后,我将根据需要使用浅层路由来请求单个(或一组)对象。
假设我有一个一对多 (>) 数据模型,例如 A > B,我有:
RKEntityMapping *a_mapping = [RKEntityMapping mappingForEntityForName:@"A" inManagedObjectStore:managedObjectStore];
[a_mapping addAttributeMappingsFromDictionary:@{@"a_id" : @"aId", ...}];
a_mapping.identificationAttributes = @[@"aId"];
RKEntityMapping *b_mapping = [RKEntityMapping mappingForEntityForName:@"B" inManagedObjectStore:managedObjectStore];
[b_mapping addAttributeMappingsFromDictionary:@{@"b_id" : @"bId", ...}];
b_mapping.identificationAttributes = @[@"bId"];
[a_mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"bs" toKeyPath:@"bs" withMapping:b_mapping]];
我有这些路线:
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *a_ResponseDescriptor;
a_ResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:a_mapping method:RKRequestMethodGET pathPattern:@"/A/:aId" keyPath:@"A" statusCodes:statusCodes];
RKResponseDescriptor *b_ResponseDescriptor;
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
b_ResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:b_mapping method:RKRequestMethodGET pathPattern:@"/B/:bId" keyPath:@"B" statusCodes:statusCodes];
[[RKObjectManager sharedManager] addResponseDescriptor:a_ResponseDescriptor];
[[RKObjectManager sharedManager] addResponseDescriptor:b_ResponseDescriptor];
我有几个相关的问题:
在返回“A”记录时我应该如何构造 JSON,以便 RestKit 为任何相关的“B”对象实例化存根?
同样,如果我想请求一堆 B 对象(没有 A 对象的先验知识),在返回“B”记录时如何构造 JSON,以便 RestKit 为拥有的“A”实例化存根'对象?
RestKit 需要哪些额外的设置/代码?
目前,我有一个方向工作(A --> B),但我似乎无法弄清楚如何让相反的工作。特别是,/A/1.json 返回如下内容:
{"a": {"a_id":1, "bs":[{"b_id": 2}, {"b_id": 3}]}}
然后 B/2.json 返回:
{"b": {"b_id":2, "a_id": 1}}
我应该改用类似的东西吗:
{"b": {"b_id":2, "a": {"a_id": 1}}}
?任何帮助/建议将不胜感激。
【问题讨论】:
标签: ruby-on-rails core-data restkit restkit-0.20