Core data 在RestKit中从域模型分离实体映射代码

Core data 在RestKit中从域模型分离实体映射代码,core-data,restkit,restkit-0.20,Core Data,Restkit,Restkit 0.20,我将遵循本教程在rest工具包中组织代码 我想将我的域模型与restKit映射分开 因此,我将所有映射添加到名为mappingProvider的类中 RKEntityMapping *tableMapping = [RKEntityMapping mappingForEntityForName:@"Table" inManagedObjectStore:[HAObjectManager sharedManager].managedObjectStore]; tableMapping.ident

我将遵循本教程在rest工具包中组织代码

我想将我的域模型与restKit映射分开

因此,我将所有映射添加到名为mappingProvider的类中

RKEntityMapping *tableMapping = [RKEntityMapping mappingForEntityForName:@"Table" inManagedObjectStore:[HAObjectManager sharedManager].managedObjectStore];
tableMapping.identificationAttributes = @[@"tableID"];
[tableMapping addAttributeMappingsFromDictionary:@{
                                                   @"ID":@"tableID",
                                                   @"TableNumber":@"tableNumber",
                                                   @"NumberOfChairs":@"numberOfChairs"}];
映射提供程序需要对ManagedObjectStore的引用,我试图从名为
HaoObjectManager
的自定义子类中获取该引用。
HAObjectManager
调用此方法调用的
[self-setupResponseDescriptor]

RKResponseDescriptor *tableResponseDescriptors = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider tableMapping] method:RKRequestMethodGET pathPattern:@"/api/table" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[self addResponseDescriptor:tableResponseDescriptors];
此方法再次调用
[MappingProvider tableMapping]
,再次调用
[HaoObjectManager sharedManager]
以获取managedObjectStore。如您所见,这会导致无限循环

有人知道我该怎么解决吗?
例如,coreData managedObjectStore的SharedInstance。

您需要更改初始化顺序,考虑到所描述的结构,这并不一定是微不足道的。如果不进行重大返工,大多数选项都是令人不快的


中断递归的一个简单选项是向
tableMapping
添加一个参数,这样就可以将对象存储作为参数传递(因此不需要回调部分初始化的单例来获取它).

我看到有人使用名为coreDataManager的自定义类的共享实例访问ManagedObjectStore
[[coreDataManager sharedInstance]objectStore]
。你知道我应该如何实施它吗?你的设想是什么?使用restKit时如何组织代码?该类只管理核心数据堆栈,而不管理其他内容。就我个人而言,我使用的数据控制器singleton拥有核心数据堆栈、映射和对象管理器——它从外部世界抽象出应用程序,并基于应用程序数据模型(无get/post/任意数据对象)提供一个接口。你有我可以使用的示例应用程序吗?查看您的代码组织?我在这里呆了一天,因为我必须把所有的代码都放在appDelegate中。那太糟糕了!!我建议您坚持最初的做法,并添加参数,以便可以传递对象存储。让它先工作,然后考虑如果你想/需要重构。