CoreData和RestKit

时间:2014-05-15 11:57:34

标签: objective-c core-data mapping restkit

我有一个关于在CoreDataRestKit之间使用逻辑的简单问题。

我正在使用RestKitJSON个回复映射到CoreData个实体。我有一个评论活动。 我正在发送请求以获取有关事件的信息,并发送第二个(暂时)评论。

有没有办法独立于我之前的事件映射注释并在之后加入它们或者是否必须在映射时加入它们?我不知道最好的方法是什么。

在我未来的实施中,我想发送以获取活动及其评论的信息。但我仍然希望保留我的辅助方法来获取评论而不会得到整个事件。

"comments": [
    {
        "id": 23,
        "user_id": 9,
        "commentable_id": 12,
        "commentable_type": "Event",
        "content": "This is the content of the event",
        "created_at": "2013-04-19 19:28:42.533901",
        "updated_at": "2013-04-19 19:28:42.533901"
    }
]

2 个答案:

答案 0 :(得分:0)

假设您拥有上述JSON,您必须添加一个属性以对应特定注释属于哪个事件,以便我们的json看起来像,

"comments": [
    {
        "id": 23,
        "user_id": 9,
        "commentable_id": 12,
        "commentable_type": "Event",
        "content": "This is the content of the event",
        "created_at": "2013-04-19 19:28:42.533901",
        "updated_at": "2013-04-19 19:28:42.533901",
        "event_id": "10", /* Note this is a new attribute to map to the parent entity */
    }
]

现在,为评论模型添加一个新属性,以便存储此 event_id 。我们创建了一个属性 eventId

因此,让我们为实体创建映射

RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Comment" inManagedObjectStore:[RKManagedObjectStore defaultStore]];
[mapping setIdentificationAttributes:@[@"identifier"]];
[mapping addAttributeMappingsFromDictionary:@{
     @"id": @"identifier",
     @"updated_at": @"updatedAt",
     @"created_at": @"createdAt",
     @"user_id": @"userId",
     @"commentable_id": @"commentableId",
     @"commentable_type": @"commentableType",
     @"content": @"content",
     @"event_id": @"eventId"
   }];

然后我们必须添加连接以将event_id映射到正确的事件,

NSRelationshipDescription *eventRelationship = [[mapping entity] relationshipsByName][@"event"];

[mapping addConnection:[[RKConnectionDescription alloc] initWithRelationship:eventRelationship attributes:@{@"eventId": @"identifier"}]];  // this line says that you have to have eventId in your comments entity and then the identifier in event entity to which the eventId will be mapped to.

就是这样,您现在可以创建RKResponseDescriptor和RKManagedObjectRequestOperation来提取注释,它将指向正确的事件。

答案 1 :(得分:0)

您可以使用外键映射(RKConnectionDescription根据@ insane-36的注释)让RestKit连接对象之间的关系。如果上下文中有适当的目标对象,那么将建立连接,如果不是,则不会进行任何操作。

如果您不想这样做,那么您需要编写代码来复制该任务,即获取注释,迭代它们,获取相关事件,连接关系,保存。

让RestKit连接关系对您来说当然要容易得多,并且不排除您在没有应该附加事件的情况下请求注释。

请注意,您可以在事件和注释映射上指定外键映射,以便在处理后一个映射时,首先加载的是RestKit将连接到另一个。