由于我不想劫持另一个线程,因此我提出了关于映射的问题。
首先阅读:Where's the best place to put object mappings in RestKit
我确信Blake Waters给出的答案很可能是非常正确的,因为他是一个比我更聪明,更有经验的人,但对我而言,逻辑告诉我将映射放在每个模型中:如果你改变某些东西在您的模型中,您只需滚动即可更改映射。
在我的AppDelegate中,我只需在每个模型中调用initMappings(或任何你想要调用的东西)。
答案 0 :(得分:1)
我也喜欢用我的模型放置映射。我通过为每个模型添加一个类方法来实现它,这样我就可以随时随地获取映射。
+ (RKObjectMapping *)objectMapping
{
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[self class]];
[mapping mapKeyPath:@"Id" toAttribute:@"id"];
[mapping mapKeyPath:@"Subject" toAttribute:@"subject"];
[mapping mapKeyPath:@"Message" toAttribute:@"message"];
[mapping mapKeyPath:@"PostDate" toAttribute:@"postDateStr"];
[mapping mapKeyPath:@"StatusId" toAttribute:@"statusId"];
[mapping mapKeyPath:@"StatusDate" toAttribute:@"statusDateStr"];
mapping.setNilForMissingRelationships = YES;
return mapping;
}
答案 1 :(得分:0)
我选择了创建类别的路线并将其放入其中。我在我的app委托类中创建了它,而不是映射提供程序。
我认为在模型中使用它的问题就像在另一个线程中描述的那样,如果你有关系,你最终可能会得到循环引用。
答案 2 :(得分:0)
我认为以你的方式思考是很自然的,因为你可以更好地控制代码及其清洁,但是你必须非常小心,正如许多人所说,循环引用的问题可以是个大麻烦。
关于该问题的一个解决方案是当你有一个A实体引用B,而B有A引用A时,那么在其中一个实体中你必须选择不直接映射实体,否则你将以循环结束。
当你拥有相同作用域的所有东西时,定义循环引用变得不可能,因为你需要B的初始定义来在A上添加它的引用,所以我刚才提到的解决方案就是在这种方法中自然的方法。 / p>
这取决于您和您的应用程序您想要使用哪种方法,这对您和您的团队来说更好。你必须在有缺陷的错误与清洁代码之间做出选择。