1

我正在尝试使用 RestKit 执行任何给定实体类名称的自动映射,而无需手动定义字段。

Product例如,想象一个使用字段调用的托管对象: id, name, type。此实体位于默认商店中。

我需要从此 URL 获取产品列表http://machin.net/products

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

问题1 defaultStore不满足要求的商店,我什至不知道如何指定它。

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

问题 2如您所见,我使用了所有字段,并且它们在源和目标上都是相同的,我没有找到任何方法告诉 RestKit 只需使用给定类的所有字段。

4

2 回答 2

5

关于问题 2

我找到了一种通过使用自动映射实体的简单方法RKPropertyIntrospector

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

我们甚至可以通过使用添加异常@{} keysOfEntriesPassingTest

于 2013-05-27T08:53:33.100 回答
1

1.您需要配置您的 RestKit / Core Data 堆栈

    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",
];

从技术上讲,您可以对实体进行一些内省,但您会编写更多代码。

于 2013-05-21T13:21:39.110 回答