2013-05-21 220 views
1

我想使用RestKit来执行任何给定实体类名称的自动映射,而不必手动定义字段。RestKit - 自动实体映射

例如,想象一个名为Product的管理对象,其字段为:id,name,type。该实体位于默认商店。

我需要从这个URL http://machin.net/products

RKEntityMapping *map = [RKEntityMapping mappingForEntityForName:@"Product" 
    inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 

问题1defaultStore没有满足要求的店购买的产品清单,我甚至不知道如何指定它。

[map addAttributeMappingsFromDictionary:@{ 
    @"id": @"id", 
    @"name": @"name", 
    @"type": @"type", 
}]; 

问题2正如你所看到的,我使用的所有领域,他们是在源&目的地一样,我没有发现任何方式告诉RestKit简单地使用的各个领域给定的班级。

回答

1

对于1,你需要配置RestKit /核心数据堆栈

NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 

    self.managedObjectStore = managedObjectStore; 

    [RKManagedObjectStore setDefaultStore:managedObjectStore]; 

    // complete the core data stack setup 
    [managedObjectStore createPersistentStoreCoordinator]; 

对于2.您可以使用

[map addAttributeMappingsFromArray:@[ 
@"id", 
@"name", 
@"type", 
]; 

从技术上讲,你可以使用一些内省的实体,但你最好写更多的代码。

+0

谢谢您的帮助,找到了一个简单的方法来自动映射实体使用RKPropertyIntrospector

NSEntityDescription *entity = [[managedObjectModel entitiesByName] objectForKey:@"Product"]; [map addAttributeMappingsFromArray:[[[RKPropertyInspector sharedInspector] propertyInspectionForEntity:entity] allKeys]]; 

我们甚至可以添加例外。你在谈论获得领域清单的反思?你的意思是RK不管理这种反思? –

+0

RK反思目标实体/对象密钥,以便知道可能。但是,这在映射处理逻辑中很深,并且在定义映射时(仅用于列出所需的键以及模型中的键和源数据中的键之间的关系)时不可用。 – Wain

+0

我明白了,它似乎对我来说不是一种奇特的需求,是吗?我的意思是能够考虑所有的字段,然后最终添加一些例外到映射将是有用的... ... –

5

关于问题2

我用@{} keysOfEntriesPassingTest