Core data RestKit将托管对象与非托管对象组合在一起
我试图在请求中使用Core data RestKit将托管对象与非托管对象组合在一起,core-data,restkit,Core Data,Restkit,我试图在请求中使用NSManagedObject作为响应类,但我也有需要的关系,我不希望管理这些关系,因为它们的更改要频繁得多。我曾尝试使用普通的NSObject,以及与NSManagedObject的瞬态关系,但这两种方法都以空关系告终(瞬态或NSObject不会饱和) 下面是我希望从请求中提取并存储在SQLite中的对象: @interface Car : NSManagedObject @property (nonatomic, retain) NSString *brand @prop
NSManagedObject
作为响应类,但我也有需要的关系,我不希望管理这些关系,因为它们的更改要频繁得多。我曾尝试使用普通的NSObject
,以及与NSManagedObject
的瞬态关系,但这两种方法都以空关系告终(瞬态或NSObject
不会饱和)
下面是我希望从请求中提取并存储在SQLite中的对象:
@interface Car : NSManagedObject
@property (nonatomic, retain) NSString *brand
@property (nonatomic, retain) MLocation *location //don't want persisted
@end
以下是我不想持久化但已饱和的对象:
//I have tried this with NSObject and NSManagedObject
@interface MLocation : NSObject
@property (nonatomic, assign) double latitude;
@property (nonatomic, assign) double longitude;
@end
以下是响应描述符:
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:self.buildCarMapping
method:RKRequestMethodGET
pathPattern:@"/v1/cars/near/:latitude/:longitude"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)] ];
以下是对象映射:
- (RKObjectMapping *)buildCarMapping {
RKEntityMapping *carMapping = [RKEntityMapping mappingForEntityForName:@"Car" inManagedObjectStore:self.managedObjectStore];
[carMapping addAttributeMappingsFromDictionary:@{
@"brand" : @"brand"
}];
[carMapping addRelationshipMappingWithSourceKeyPath:@"location" mapping:self.buildLocationMapping];
return carMapping;
}
//I have tried this with NSObject and a transient NSManagedObject relationship
- (RKObjectMapping *)buildLocationMapping {
RKObjectMapping *locationMapping = [RKObjectMapping mappingForClass:[MLocation class]];
[locationMapping addAttributeMappingsFromDictionary:@{
@"longitude": @"longitude",
@"latitude": @"latitude"
}];
return locationMapping;
}
下面是一个示例响应:
{
"brand": "Chevy",
"location": { //This is ignored by RestKit using my mappings
"latitude": 42.8,
"longitude": -98.6
}
}
我认为没有办法做到这一点,因为托管对象是在后台线程上创建的,而让它们返回给您的唯一方法是销毁这些实例(使用临时数据),并从主线程上的持久数据生成相应的实例 如果您自己在当前线程上创建并执行映射操作,它可能会工作,但是您还需要管理许多其他需求/处理一些问题 我会考虑使用2个响应描述符。第一种方法与您一样,将核心数据相关内容处理到持久存储中。第二个将用于在适当的实例层次结构中创建普通(临时)对象,该对象包含唯一标识符(根据需要),以便在需要时获取关联的托管对象。你不会有直接的关系,但你会有你需要的所有信息