Restkit 无法为 keyPath 添加映射

Posted

技术标签:

【中文标题】Restkit 无法为 keyPath 添加映射【英文标题】:Restkit Unable to add mapping for keyPath 【发布时间】:2016-06-20 18:49:16 【问题描述】:

我的几个对象都有字段“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”而终止应用程序,原因:“无法为 keyPath MyId 添加映射,一个已经存在...”

【问题讨论】:

我认为您对该问题的评估不准确 - 显示 MyObject 的定义并准确解释您在遇到异常时正在做什么(显示堆栈跟踪) 更新了帖子以更具体。 感谢您的帮助!另外,您是否知道任何网站可以提供良好的 RestKit 教程?对它比较新。已经了解 RestKit github 教程,但想知道是否还有更多。 【参考方案1】:

问题只是你在打电话:

[userMapping addAttributeMappingsFromDictionary:objMapping];

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

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

[RKObjectMapping requestMapping] 

【讨论】:

以上是关于Restkit 无法为 keyPath 添加映射的主要内容,如果未能解决你的问题,请参考以下文章

RestKit - 找不到 keyPath 的对象映射:''

关系映射中的Restkit映射keyPath

“找不到给定内容的任何映射,keyPath=null”RestKit 0.2

特定实体的 RestKit 映射

RestKit 没有从 JSON 映射图像

RestKit 添加属性映射和关系映射