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 保存所选产品?
非常感谢,
丹
把它们全部保存起来。当您的数据远远超过一个屏幕可以容纳的数量时,核心数据将使您更容易仅加载显示所需的数据。然后,只需向您的实体添加一个标志,该标志会在用户选择或取消选择产品时设置(并保存)。
请注意,您可以使用普通对象和托管对象来完成此操作,但这对您来说需要更多代码和复杂性,并且在内存和处理器使用方面效率较低。
我有一个 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 保存所选产品?
非常感谢, 丹
把它们全部保存起来。当您的数据远远超过一个屏幕可以容纳的数量时,核心数据将使您更容易仅加载显示所需的数据。然后,只需向您的实体添加一个标志,该标志会在用户选择或取消选择产品时设置(并保存)。
请注意,您可以使用普通对象和托管对象来完成此操作,但这对您来说需要更多代码和复杂性,并且在内存和处理器使用方面效率较低。