我正在使用RestKit进行项目,我注意到类中不再有一个方法可以控制(elementToPropertyMappings)中的所有映射,因此我想知道放置新代码的最佳位置在哪里,目前我在我的视图控制器中这样做,但我会在我的代码的其他区域使用大多数相同的映射,所以有一个更有效的地方可以使用它:
我所指的代码是:
RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[User class]];
[userMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[userMapping mapKeyPath:@"forename" toAttribute:@"forename"];
[userMapping mapKeyPath:@"surname" toAttribute:@"surname"];
[userMapping mapKeyPath:@"email" toAttribute:@"email"];
[userMapping mapKeyPath:@"twitter_username" toAttribute:@"twitterUsername"];
[userMapping mapKeyPath:@"created" toAttribute:@"created"];
[userMapping mapKeyPath:@"use_gravatar" toAttribute:@"useGravatar"];
[userMapping mapKeyPath:@"avatar_url" toAttribute:@"avatarURL"];
[userMapping mapKeyPath:@"gender" toAttribute:@"gender"];
[[RKObjectManager sharedManager].mappingProvider setMapping:userMapping forKeyPath:@"user"];
如果可以在User类的方法中然后调用以设置这些映射等,那将是很好的。
非常感谢
答案 0 :(得分:9)
有一些很好的方法来组织目前推荐的映射:
在类方法上定义映射的问题在于,当您有关系时,您可以结束循环依赖关系,因为没有可用于存储实例的ivars。我们或许可以使用块来帮助缓解这个问题,但还没有做过这样的工作。
答案 1 :(得分:3)
我认为域模型应该是唯一应该了解映射的人。 这是我如何映射一些flickr json:
我在你需要它时调用映射(可以在AppDelegate或你想要的地方)
// Setup our object mappings
RKObjectMapping *photoMapping = [Photo mapWithMapping:nil];
RKObjectMapping *photosMapping = [Photos mapWithMapping:photoMapping];
这是我的域对象之一: 它包含执行映射的classMethod。
#import "Photos.h"
@implementation Photos
+ (RKObjectMapping*)mapWithMapping: (RKObjectMapping*)aMapping
{
RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKManagedObjectMapping *mapping = [RKManagedObjectMapping mappingForClass:[self class] inManagedObjectStore:objectManager.objectStore];
[mapping mapKeyPathsToAttributes:
@"page", @"page",
@"pages", @"pages",
@"perpage", @"perpage",
@"stat", @"stat",
@"total", @"total",
nil];
if (aMapping) {
[mapping mapRelationship:@"photo" withMapping:aMapping];
}
return mapping;
}
@end
答案 2 :(得分:1)
我通常在App Delegate中创建一个私有方法,我在app setup期间调用它来设置RKObjectManager,然后构建我在整个应用程序中使用的所有映射。我相信RestKit示例项目使用相同的模式,因此请务必将其作为参考。