6

因为我不想劫持另一个线程,所以我提出了关于映射的问题。

初读:在 RestKit 中放置对象映射的最佳位置在哪里

我确信 Blake Waters 给出的答案可能是非常正确的,因为他是一个比我更聪明、更有经验的人,但对我来说,逻辑告诉我将映射放在每个模型中:如果你改变了模型中的某些内容,您只需滚动即可更改映射。

然后,在我的 AppDelegate 中,我将在我的每个模型中调用 initMappings (或任何您想调用的名称)。

4

3 回答 3

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;
}
于 2012-03-29T17:24:05.353 回答
0

我选择了创建类别的路线并将其放入其中。我已经在我的应用程序委托类而不是映射提供程序上创建了它。

我认为在模型中使用它的问题就像在另一个线程中描述的那样,如果你有关系,你最终可能会得到循环引用。

于 2011-12-15T11:56:14.747 回答
0

我相信以您的方式思考是很自然的,因为您可以更好地控制代码及其清洁度,所以它很有意义,但是您必须非常小心,正如许多人所说,循环引用的问题可能很大麻烦。

关于该问题的解决方案是,当您有一个 A 实体引用 B,而 B 引用 A 时,那么在两个实体之一中,您将不得不选择不直接映射实体,否则您将在循环中结束。

当您在同一范围内拥有所有内容时,定义循环引用变得不可能,因为您需要 B 的初始定义才能在 A 上添加它的引用,所以我刚才提到的解决方案是在这种方法上执行它的自然方式。

这取决于您和您的应用程序您想使用哪种方法,哪种方法更适合您和您的团队采用。您必须在可能的错误和更简洁的代码之间做出选择。

于 2012-05-31T00:52:40.130 回答