tilo
tilo

Reputation: 14169

RestKit: Composing Relationships with the Nil Key Path

I have two classes

and want to map some JSON to it

"authors": [
    {
        "id": 123,
        "papers": [
            {
                "id": 1,
                "main_author_id": 123,
                ...
            },
            ...
        ]
    },
    ...
]

The problem is that the JSON is not structured like

"authors": [
    {
        "id": 123,
        "papers": [
            {
                "id": 1,
                "main_author": {
                    "id": 123
                }
                ...
            },
            ...
        ]
    },
    ...
]

so that I could easily map things (note the *main_author* part of both JSON examples). I tried using mapping this value without a key path as explained here:

[authorMapping addAttributeMappingToKeyOfRepresentationFromAttribute:@"main_author_id"];
[authorMapping addAttributeMappingsFromDictionary:@{@"(main_author_id)": @"id"}];

but I'm getting an error telling me that the keyPath id already exists and I may not add a second mapping for this keyPath. I totally understand this error, but I have no idea how to map from *main_author_id* back to id. Changing the data source may be the best solution, but this is unfortunately not possible.

Any suggestion is highly welcome! Thanks!

Upvotes: 0

Views: 102

Answers (2)

Wain
Wain

Reputation: 119031

This is exactly what foreign key mapping is for. It allows you to temporarily store the 'identity' value that you're provided with and then RestKit will find the appropriate object and complete the relationship.

Upvotes: 1

tilo
tilo

Reputation: 14169

Apart from the Answer @Wain (foreign key mapping) provided, it is also possible to implement a custom serialization (c.f. RKSerialization) and modify the objects before mapping takes place. However, the aforementioned method is superior to this (somehow ugly) solution.

Upvotes: 0

Related Questions