Iphone RestKit对象映射在一个项目中失败,但在Twitter示例中没有失败

Iphone RestKit对象映射在一个项目中失败,但在Twitter示例中没有失败,iphone,objective-c,rest,restkit,Iphone,Objective C,Rest,Restkit,学习RESTKit 步骤1:我已经成功运行了Twitter示例项目 第2步:我已经成功地修改了Twitter项目,指向我自己的REST Web服务。。。REST能够成功地解释结果,并将它们映射到我构建的自定义对象 步骤3:我已经创建了自己的项目空间,并通过一些小的编辑将第2步的工作代码复制粘贴到这个项目中,奇怪的是,RESTKit无法正确映射结果。我现在快发疯了 打开RESTKit中包含的方便的调试跟踪,两个项目都可以到达以下位置: 2012-08-12 21:06:14.145 RKTwitt

学习RESTKit

步骤1:我已经成功运行了Twitter示例项目

第2步:我已经成功地修改了Twitter项目,指向我自己的REST Web服务。。。REST能够成功地解释结果,并将它们映射到我构建的自定义对象

步骤3:我已经创建了自己的项目空间,并通过一些小的编辑将第2步的工作代码复制粘贴到这个项目中,奇怪的是,RESTKit无法正确映射结果。我现在快发疯了

打开RESTKit中包含的方便的调试跟踪,两个项目都可以到达以下位置:

2012-08-12 21:06:14.145 RKTwitter[9087:13003] D restkit.object_mapping:RKObjectMapper.m:320 Performing object mapping sourceObject
但Step2项目将此作为下一条消息:

2012-08-12 21:06:14.294 RKTwitter[9087:13003] T restkit.object_mapping:RKObjectMapper.m:278 Examining keyPath '' for mappable content...
2012-08-12 21:06:14.301 RKTwitter[9087:13003] D restkit.object_mapping:RKObjectMapper.m:261 Found mappable collection at keyPath ''...
鉴于我的Step3项目放弃并死亡:

2012-08-12 21:10:40.912 DogPark[9127:13203] D restkit.object_mapping:RKObjectMapper.m:351 The following operations are in the queue: ()
卷起袖子,我已经确定了RESTKit中代码执行差异出现的确切位置:

RKObjectMappingProvider.m
中,第160行是以下方法:

- (id)valueForContext:(RKObjectMappingProviderContext)context {
    NSNumber *contextNumber = [NSNumber numberWithInteger:context];
    return [mappingContexts objectForKey:contextNumber];  
}
对于Step2,它返回一个包含1个元素的字典,而我的Step3项目返回一个包含0个元素的字典。此字典用于
RKObjectMapper.m
,第332行,其中FoundMapable对于Step2项目为true,对于我的Step3为false

if ([mappingsForContext isKindOfClass:[NSDictionary class]]) {
        results = [self performKeyPathMappingUsingMappingDictionary:mappingsForContext];
        foundMappable = (results != nil);
以下代码似乎正确,但似乎不希望正常运行:

// init the Object Manager
RKURL *baseURL = [RKURL URLWithBaseURLString:SERVER_ADDRESS];
RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL];
objectManager.client.baseURL = baseURL;

// Mapping
RKObjectMapping *ownerMapping = [RKObjectMapping mappingForClass: [DogOwner class]];
[ownerMapping mapKeyPath:@"DogOwnerId" toAttribute:@"dogOwnerID"];
[ownerMapping mapKeyPath:@"DogName" toAttribute:@"dogName"];
[ownerMapping mapKeyPath:@"OwnerFirstName" toAttribute:@"ownerFirstName"];
[[RKObjectManager sharedManager].mappingProvider setObjectMapping:ownerMapping forResourcePathPattern:@"/DogOwner"];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath: @"/dogowner" delegate:self];

有什么想法吗?

谢谢你对你的问题所作的非常滑稽的叙述

一个错误是指定到
/Dogowner
的映射并尝试加载
/Dogowner
。你上面的评论还带来了另外两个巨大的问题

  • xml和json是不可交换的
  • 您的源密钥路径错误
    你能添加一些api数据样本吗?是的,我想我必须提供很多来回答这个问题。我想看看我怎么能问这个问题,这样会更有成效。我想知道Twitter项目中是否有某种编译器开关,我需要看看。这只虫子太晦涩了。今晚我会补充更多细节。嗯,我真的不明白为什么这两个项目在行为上存在差异,但我改变了周围的一切,现在一切都正常了。更改了我对:[[RKObjectManager sharedManager].mappingProvider setObjectMapping:ownerMapping forResourcePathPattern:@“/DogOwner]”的使用;到[[RKObjectManager sharedManager].mappingProvider setMapping:ownerMapping forKeyPath:@“ArrayOfDogOwner.DogOwner”];并且,将输入指定为xml而不是json。RestKit能够在Step2中神奇地找出代码,因此我不确定XML/JSON是否是问题所在。谁知道呢,我同意你的意见。。。当然是大问题。即使在这篇我认为我能让它工作的帖子之后,我仍然有问题。更复杂的是,REST服务也不能正常运行,这使得调试客户端变得不可能。我也注意到RestKIT似乎有相同功能的同义词,但我不确定。ie:您可以拥有[objectManager.mappingProvider registerMapping:OwnerMappingWithRootKeyPath:@“dogOwner”];以及[[RKObjectManager sharedManager].mappingProvider setMapping:ownerMapping forKeyPath:@“dogowner”];“有什么区别?