RestKit+CoreData+MagicalRecord:如何不持久化托管对象

RestKit+CoreData+MagicalRecord: how not to persist managed objects

我有一个 Web 服务,其中 returns 对象列表(数百种产品)不需要持久化,只是临时显示。

用户可以select其中任何一项,并且此类项目必须保存到数据库中。

是否可以仅使用一个 NSManagedObject 实体来管理这种情况?

使用此响应描述符:

- (id)productsResultResponseDescriptor {

    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Product class]];
    [mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"products" toKeyPath:@"products" withMapping:[Product mapping]]];  
    ...
    return productsResultResponseDescriptor;
}

+ (RKObjectMapping *)mapping {
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[self class]];
    [mapping addAttributeMappingsFromDictionary:@{
                                   @"name":@"name",
                                   @"category":@"category"
                                }];
    return mapping;
}

使用此配置,我在 RKMappingOperation 的 validateValue 方法中遇到错误访问异常。

它可以工作还是我应该有两个不同的对象

Product : NSObject
ManagedProduct : NSManagedObject

并使用前者使用 RestKit 检索数据,使用后者使用 MagicalRecord 保存所选产品?

非常感谢, 丹

把它们全部保存起来。当您的数据远远超过一个屏幕可以容纳的数量时,核心数据将使您更容易仅加载显示所需的数据。然后,只需向您的实体添加一个标志,该标志会在用户选择或取消选择产品时设置(并保存)。

请注意,您可以使用普通对象和托管对象来完成此操作,但这对您来说需要更多代码和复杂性,并且在内存和处理器使用方面效率较低。