Ipad Rest工具包核心数据在实体调用的GET存储期间重写主数据

Ipad Rest工具包核心数据在实体调用的GET存储期间重写主数据,ipad,core-data,restkit-0.20,Ipad,Core Data,Restkit 0.20,我有一个称为货币的实体和另一个称为订单的实体,它与货币有一对一的关系。货币映射为如下标识属性代码: l_mapping.identificationAttributes = @[@"code"]; 现在,当订单调用成功时,具有相同代码(如USD)的订单中的货币关系将覆盖货币表中的货币关系。我怎样才能避免这种情况?有没有办法只引用它而不创建/覆盖货币表中的数据。非常感谢您的帮助 下面是JSON和模型类的简化版本 @class Order; @interface Currency : NSMan

我有一个称为货币的实体和另一个称为订单的实体,它与货币有一对一的关系。货币映射为如下标识属性代码:

l_mapping.identificationAttributes = @[@"code"];
现在,当订单调用成功时,具有相同代码(如USD)的订单中的货币关系将覆盖货币表中的货币关系。我怎样才能避免这种情况?有没有办法只引用它而不创建/覆盖货币表中的数据。非常感谢您的帮助

下面是JSON和模型类的简化版本

@class Order;

@interface Currency : NSManagedObject

@property  (nonatomic,retain) NSNumber * version;
@property (nonatomic, retain) NSString * code;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Order *billCurrencyInv;

@end
RKEntityMapping* Mapping = [RKEntityMapping mappingForEntityForName:@"Currency" inManagedObjectStore:managedObjectStore];

Mapping.identificationAttributes = @[ @"code" ];
[Mapping addAttributeMappingsFromDictionary:@{
    @"code": @"code",
    @"version": @"version",
    @"name": @"name"

}];

{
 "List": [
    {
     "code": "GBP",
     "version": 1,
     "name": "Pound"
    },
    {
     "code": "USD",
     "version": 1,
     "name": "US Dollars"
    }
 ],
 "totalCount": 2
}

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Currency;

@interface Order : NSManagedObject

@property  (nonatomic,retain) NSNumber * version;
@property (nonatomic, retain) NSString * createdBy;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) Currency * billCurrency;

@end
RKEntityMapping* orderMapping = [RKEntityMapping mappingForEntityForName:@"Order" inManagedObjectStore:managedObjectStore];

orderMapping.identificationAttributes = @[ @"type" ];
[orderMapping addAttributeMappingsFromDictionary:@{
    @"type": @"type",
    @"createdBy": @"createdBy",
    @"version": @"version"

}];

[orderMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"billCurrency"
                                                                               toKeyPath:@"billCurrency"
                                                                             withMapping:Mapping]];



{
 "List": [
    {
     "type": "Order”,
     "createdBy": "Me",
     "version": 1,
     "billCurrency": {
       "code": "GBP",
       "name": "British Pound"
     },
],
}
@类顺序;
@接口货币:NSManagedObject
@属性(非原子,保留)NSNumber*版本;
@属性(非原子,保留)NSString*代码;
@属性(非原子,保留)NSString*名称;
@财产(非原子,保留)订单*billCurrencyInv;
@结束
RKEntityMapping*Mapping=[RKEntityMappingForEntityForName:@“货币”在managedObjectStore:managedObjectStore];
Mapping.identificationAttributes=@[@“代码”];
[映射addAttributeMappingsFromDictionary:@{
@“代码”:@“代码”,
@“版本”:@“版本”,
@“名称”:@“名称”
}];
{
“名单”:[
    {
“代码”:“英镑”,
“版本”:1,
“姓名”:“英镑”
    },
    {
“代码”:“美元”,
“版本”:1,
“名称”:“美元”
    }
 ],
“总数”:2
}
#进口
#进口
@类别货币;
@接口顺序:NSManagedObject
@属性(非原子,保留)NSNumber*版本;
@属性(非原子,保留)NSString*createdBy;
@属性(非原子,保留)NSString*类型;
@财产(非原子,保留)货币*billCurrency;
@结束
RKEntityMapping*orderMapping=[RKEntityMappingForEntityForName:@“订单”位于managedObjectStore:managedObjectStore];
orderMapping.identificationAttributes=@[@“类型”];
[orderMapping addAttributeMappingsFromDictionary:@{
@“类型”:@“类型”,
@“createdBy”:@“createdBy”,
@“版本”:@“版本”
}];
[orderMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@“billCurrency”
toKeyPath:@“billCurrency”
withMapping:映射]];
{
“名单”:[
    {
“类型”:“订单”,
“createdBy”:“我”,
“版本”:1,
“billCurrency”:{
“代码”:“英镑”,
“名称”:“英镑”
     },
],
}

发生的情况是,英镑名称为“Pound”的货币被覆盖为“British-Pound”。我不想这样。我想知道是否有办法让rest kit知道它必须引用英镑的货币对象,而不是在创建订单的核心数据对象时创建或覆盖它。我尝试了所有类型的关系(订单-货币)ie一对一,多对一。但是没有用。如果我将bill currency设置为transient,它就没有任何数据,我猜这是正确的。提前感谢。

您需要提供有关模型、类和映射的更多详细信息。听起来您没有给RestKit足够的信息来唯一标识所有内容(任何时候)…您的意思是我必须在identificationAttributes中提供货币的所有属性吗?代码是唯一的成员,而order的JSON只包含货币的几个属性,它更像是对主数据(即货币)的引用。但是,由于order是一个实体,因此当我收到请求时,它会检查代码并更新这些值关于现有的主数据。我想引用它,而不是更新它。谢谢,我的意思是你需要为你的问题添加更多的细节,因为那里没有足够的信息让我知道问题是什么-我需要查看模型、JSON以及你试图如何将它们映射在一起…@wain抱歉,无法上载它。但我正在添加货币映射作为与addPropertyMapping的关系映射。两个调用都可以自己工作。是否无法告诉rest kit拥有对实际货币对象的引用,而不是创建一个新的货币对象并重写它。再次为无法提供足够的信息而抱歉。请扫描您的非全局查找和替换以显示代码使用不同的名称?标识属性是查找要更新的现有项而不是创建新实例的方法。。。