Restkit 无法为 keyPath 添加映射

Restkit Unable to add mapping for keyPath

我的几个对象有字段 "id" 并且 RestKit 不允许我将它们映射到相同的名称。我怎样才能解决这个问题?对于这两个对象,我有一个相应的服务器端对象,需要填写 MyId 属性。我不想将属性重命名为解决方案。

这里有两个例子 类 我可能会用到:

@interface MyObject : NSObject
@property NSNumber *id;
@end

@interface AnotherObject : NSObject
@property NSNumber *id;
@end

这是我将 运行 用于这两个对象的代码示例:

RKObjectManager* objectManager = [RKObjectManager managerWithBaseURL:url];
RKObjectMapping *userMapping = [RKObjectMapping requestMapping]; 
NSDictionary *objMapping = @{@"id": @"MyId"};

[userMapping addAttributeMappingsFromDictionary:objMapping];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[MyObject class] rootKeyPath:nil method:RKRequestMethodPOST];
[objectManager addRequestDescriptor:requestDescriptor];

objMapping = @{@"id": @"MyId"};

[userMapping addAttributeMappingsFromDictionary:objMapping];
requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[AnotherObject class] rootKeyPath:nil method:RKRequestMethodPOST];
[objectManager addRequestDescriptor:requestDescriptor];

这是我会得到的错误:

由于未捕获的异常 'NSInternalInconsistencyException',正在终止应用程序,原因:'Unable to add mapping for keyPath MyId, one already exists...'

问题很简单,你正在调用:

[userMapping addAttributeMappingsFromDictionary:objMapping];

多次使用相同的参数,这是不允许的。

在您问题的特定情况下,您不需要第二行。在一般情况下,您在映射中会有一些其他差异,因此您将创建一个新映射(然后向其添加映射字典):

[RKObjectMapping requestMapping]