RESTKIT一对多的逆关系(无核心)



设置

想象作者与书籍之间的以下关系:

[Author] -- has many --> [Book]

使用RESTKIT,我有一个作者模型和书籍模型,然后在作者和书籍之间建立了关系:

[authorMapping hasMany:@"books" withMapping:booksMapping];

我现在可以通过作者的财产访问作者的书:

@property (strong, nonatomic) NSSet *books;

到目前为止一切都很好。同样,我想通过其属性访问一本书的作者:

@property (weak, nonatomic) Author *author;

问题

这是问题开始的地方。为了实现这种反相关关系,我添加了以下内容:

[booksMapping hasOne:@"author" withMapping:authorMapping];

这会导致每个映射递归致电,直到程序死亡。根本不好。检查我发现的文档/hasone/许多:使用图:方法只是调用mapkeypath:torelationship:withmapping:因此,那里没有真正的替代方案。此外,添加映射如下:

[bookMapping mapKeyPath:@"author" toAttribute:@"author"];

显然,只需创建映射,但实际上不会将作者对象映射到本书的作者属性中。


问题

如何使用RESTKIT(而不是Coredata)之间在两个或多个模型之间建立逆一对多关系?

注意:RESTKIT的较新版本使用不同的映射方案。

Note2:我认为在您的示例中,您的意思是:

[booksMapping hasOne:@"author" withMapping: authorMapping];(不是书图)

这里的问题不是映射,您不应该将相同的映射定义到多对一的侧面,而是已经完成了此映射(在agrormapping中定义)。您只需要指向父项目的指针,而不是重复整个映射过程。
真正的问题是,您需要将父对象定义为子对象的属性,就nsdictionaries而言,使用自定义类别可能是可能的,但这不是RESTKIT支持用于转换对象的支持。

我的解决方案是我项目的特定的,但也可能适合他人。我在作者模型中添加了loadBooks方法,该方法从API中获取了其所有书籍。这里的诀窍是贯穿所有已加载的书籍对象,并将其作者属性设置为自我。这样的东西:

作者

- (void)loadBooksWithCompletionBlock..... {
    ...
    for (Book *book in result) {
        book.author = self;
    }
    ...
} 

我不确定我对这种方法是否完全满意,但它适合这种特殊情况的需求。

在撰写问题时我不知道的另一件事是API(Woops)的确切响应。事实证明,API响应中的作者对象对其书籍一无所知。另一方面,API响应中的书籍对象始终知道其作者。获取作者的所有书籍都需要与/api/books/<author_id>类似的呼叫,这是我在loadBooks...方法中使用的终点。因此,建立我寻求答案的逆逆关系是

的一度相对复杂的。

RESTKIT UPDATE

应该注意的是,在上述应用程序中,我没有使用最新版本的RestKit。在开发应用程序期间,RestKit发布了重大更新,这改变了几个事情的完成方式。这个问题是指RESTKIT&LT的版本。0.2。

最新更新