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个响应描述符。第一种方法与您一样,将核心数据相关内容处理到持久存储中。第二个将用于在适当的实例层次结构中创建普通(临时)对象,该对象包含唯一标识符(根据需要),以便在需要时获取关联的托管对象。你不会有直接的关系,但你会有你需要的所有信息