RestKit:两个独立的feed,两个不同的对象类型。一个对象管理器?

时间:2012-02-20 00:58:11

标签: objective-c ios core-data restkit

我第一次使用RestKit并且非常高兴,不幸的是当前的项目让我开了一个循环。

首先,我有两个Feed。一个用于新闻,另一个用于照片...

新闻Feed ...

[
    {"id":1234, "title":"Top story"},
    {"id":1235, "title":"Next story"},
    {"id":1236, "title":"Final story"}
]

照片Feed ...

[
    {"id":1919, "url":"president.jpg"},
    {"id":1920, "url":"celebrity.jpg"},
    {"id":1921, "url":"sports.jpg"}
]

...在我的核心数据模型中,我创建了与这些属性匹配的这些实体。我还为RestKit设置了我的映射...

RKManagedObjectMapping* newsMapping = [RKManagedObjectMapping mappingForEntityWithName:@"News"];
newsMapping.primaryKeyAttribute = @"id";

[newsMapping mapKeyPath:@"id" toAttribute:@"id"];
[newsMapping mapKeyPath:@"title" toAttribute:@"article_id"];

[objectManager.mappingProvider setMapping:newsMapping forKeyPath:@"News"];


RKManagedObjectMapping* photoMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Photo"];
photoMapping.primaryKeyAttribute = @"id";

[photoMapping mapKeyPath:@"id" toAttribute:@"id"];
[photoMapping mapKeyPath:@"url" toAttribute:@"url"];

[objectManager.mappingProvider setMapping:photoMapping forKeyPath:@"Photo"];

...在上面的代码中我知道指定的keyPaths不存在于提要中,但是提供空的keyPaths似乎只是覆盖了映射,而RestKit似乎忽略了提要中缺少的keyPAth。接下来,在我正在显示对象的每个视图控制器中,我运行了一些非常相似的代码......

RKObjectManager* objectManager = [RKObjectManager sharedManager];
// objectManager.inferMappingsFromObjectTypes = YES;

[objectManager loadObjectsAtResourcePath:@"json/news" delegate:self block:^(RKObjectLoader* loader) {
    loader.objectMapping = [objectManager.mappingProvider objectMappingForClass:[News class]];
}];

......足够的背景。所有这些代码一起加载零新闻和零照片。如果我注释掉照片映射,我的所有新闻都会填充,如果我注释掉新闻映射,那么我的照片就会出现在商店中。

RestKit无法将每个Feed的内容与其映射匹配在一起。 setMapping:forKeyPath:中指定的键路径将不起作用,因为源没有指定任何内容。我想也许objectManager.inferMappingsFromObjectTypes = YES会让RestKit检查每个feed有什么,并选择正确的映射,但事实并非如此。另外,我假设objectMappingForClass:会自动拾取正确的映射,但没有。有没有人有任何想法如何使这项工作?

更新:实际上,即使RestKit报告第一次应用程序运行时没有加载任何项目,如果我再次停止并再次运行,我现在可以看到从缓存加载的所有20个新闻项目和20张照片。我通过运行一次确认了这一点,看到消息“缓存所有0个新闻对象以线程本地存储”然后立即打开.sqlite文件并按预期看到所有20个项目。

1 个答案:

答案 0 :(得分:0)

这条评论:https://groups.google.com/d/msg/restkit/b0K0nCha8D0/VadnqDVB1-oJ让我走上了正确的道路。我有一个项目与现有的核心数据堆栈,一旦我删除所有相关的代码到另一组商店和上下文等,一切都有魅力。多么棒的框架。