RestKit:如何手动设置托管对象属性的值?

时间:2013-06-12 13:01:47

标签: ios objective-c core-data restkit

如何在对象管理器管理的RestKit中手动设置托管对象属性的值?

我创建了一个带有持久存储的RKObjectManager,用于核心数据持久性。

我在对象管理器中添加了一个RKEntityMapping和一个RKResponseDescriptor。

现在我可以像这样调用对象管理器:

[[RKObjectManager sharedManager]
 getObjectsAtPath:@"/path_to_ressource"
 parameters:nil
 success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    // success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    // report error
}];

数据很好地显示在UITableView中(我正在使用NSFetchedResultsController)。 一切都很好,我的数据仍然存在。

现在我想向依赖于响应描述符的keypath的实体添加一个属性。 我该怎么办?在哪里?

我的第一次尝试:

我将属性添加到核心数据实体,然后我在上面代码的成功块中尝试了这个:

for (Entity *s in mappingResult.dictionary[@"CurrentEntities"]) {
    s.isCurrent = [NSNumber numberWithBool:YES];
}

for (Entity *s in mappingResult.dictionary[@"OldEntities"]) {
    s.isCurrent = [NSNumber numberWithBool:NO];
}

假设json看起来像这样:

{
    CurrentEntities: [{ id: 10, title: "bhubhbhu"}, { id: 11, title: "ezeze"}, ...],
    OldEntities: [{ id: 0, title: "rf-reref"}, { id: 1, title: "vcvcvcvcv"}, ...]
}

将新的本地属性设置为YES或NO后,我确实可以在我的表视图中看到结果,但看起来这些更改不会保留。

所有想法?

编辑:

好吧,似乎保存上下文会使更改保持正确:

NSError *error = nil;
[[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext saveToPersistentStore:&error];

编辑:

实际上看起来我必须在每个对象更改后保存上下文,否则我会收到Core Data错误。

1 个答案:

答案 0 :(得分:1)

如您所见,您可以保存所做的编辑。由于您尝试设置的值不是基于用于下载数据的URL中的任何内容或有效负载数据(值)的内容,因此您最简单的选择就是进行后处理和保存。要与映射过程进行交互并注入值,需要更多代码。