2013-05-21 182 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