Question

J'ai une réponse JSON de mon serveur. Les données, tirées de l'apparence du journal de RestKit comme ceci:

sourceObject: ( 
    { 
    place =         { 
        "place_id" = "3cc1e372-f9d9-11e0-aba9-9415ab1a8034"; 
        placeinfo =             { 
            latitude = "12.5846738815"; 
            longtitude = "55.6815948486"; 
            "place_id" = "3cc1e372-f9d9-11e0-aba9-9415ab1a8034"; 
        }; 
        timestamp = "2011-10-19 00:33:44"; 
    }; 
}, 
    { 
    place =         { 
        "place_id" = "b65e36e0-f9d9-11e0-aba9-9415ab1a8034"; 
        placeinfo =             { 
            latitude = "12.5720376968"; 
            longtitude = "55.6785774231"; 
            "place_id" = "b65e36e0-f9d9-11e0-aba9-9415ab1a8034"; 
        }; 
        timestamp = "2011-10-19 00:37:08"; 
    }; 
}, 
    { 
    Timestamps =         { 
        "latest_update" = "2011-10-18 17:12:09"; 
        uuid = "8c6fb842-f99b-11e0-aba9-9415ab1a8034"; 
    }; 
} )and targetObject: (null) 

Les données sont mappées dans 3 objets:

Place, Placeinfo et LatestDBUpdate.

Le problème est:

Dans la réponse ci-dessus JSON il y a 2 placer des objets et 2 objets imbriqués PlaceInfo, connecté à un à la relation Beaucoup.

Il y a aussi un objet LatestDBUpdate qui se rapporte au mot-clé Horodatage.

Restkit cartographierons 3 Placez les objets, et ne sera tout NULL. Les 2 autres objets sont mis en correspondance correctement place et les relations sont également correctes. Il faut bien sûr que la carte 2 place des objets!

La cartographie cartographie LatestDBUpdate s aussi les horodatages corrects.

I ai déterminé que, si i retirer la partie horodatages des respons JSON, l'application est correcte, avec seulement 2 place les objets.

Mais je dois la partie Horodatage être là! Je ne sais pas comment résoudre ce problème! toutes les idées - je pourrais vraiment utiliser une entrée, depuis que je l'ai utilisé des heures et des heures sur ce

Voici la configuration de mappage utilisé:

//Place mapping 
if (!self.placeManagedObject){ 
    self.placeManagedObject = [RKManagedObjectMapping mappingForClass:[Place class]]; 
    self.placeManagedObject.primaryKeyAttribute = @"UUID"; 
    self.placeManagedObject.setDefaultValueForMissingAttributes = YES; 
    [self.placeManagedObject mapKeyPath:@"place_id" toAttribute:@"UUID"]; 
    [self.placeManagedObject mapKeyPath:@"timestamp" toAttribute:@"timestamp"]; 
} 
//PlaceInformation mapping 
if (!self.placeInfoManagedObject){ 
    self.placeInfoManagedObject = [RKManagedObjectMapping mappingForClass:[PlaceInfo class]]; 
    self.placeInfoManagedObject.primaryKeyAttribute = @"UUID";self.placeInfoManagedObject.setDefaultValueForMissingAttributes = YES; 
    [placeInfoManagedObject mapKeyPath:@"place_id" toAttribute:@"UUID"]; 
    [placeInfoManagedObject mapKeyPath:@"longtitude" toAttribute:@"longtitude"]; 
    [placeInfoManagedObject mapKeyPath:@"latitude" toAttribute:@"latitude"]; 
} 
//latestDBUpdate timestamp mapping 
if (!self.latestDBUpdateManagedObject){ 
    self.latestDBUpdateManagedObject = [RKManagedObjectMapping mappingForClass:[LatestDBUpdate class]]; 
    self.latestDBUpdateManagedObject.primaryKeyAttribute = @"latest_update"; 
    [self.latestDBUpdateManagedObject mapKeyPath:@"latest_update"toAttribute:@"latest_update"]; 
    [self.latestDBUpdateManagedObject mapKeyPath:@"uuid" toAttribute:@"uuid"]; 
} 
//Set mapping relations 
[self.placeManagedObject mapRelationship:@"placeinfo" withMapping:self.placeInfoManagedObject]; 
// Register mapping with the provider - 
[self.objectManager.mappingProvider setMapping:self.placeManagedObject forKeyPath:@"place"]; 
[self.objectManager.mappingProvider setMapping:self.placeInfoManagedObject forKeyPath:@"placeinfo"]; 
[self.objectManager.mappingProvider setMapping:self.latestDBUpdateManagedObject forKeyPath:@"Timestamps"]; 
Était-ce utile?

La solution

Retour à nouveau, avec une réponse à mon problème ... Il semble qu'il n'y a pas beaucoup de membres ici que l'utilisation Restkit!

Ma solution, peut-être pas assez, mais le seul qui a fonctionné, sans enlèvement de la partie horodatages de la réponse JSON:

I a modifié la réponse JSON de la manière suivante:

{ 
placeList =     ( 
            { 
        place =             { 
            "place_id" = "3cc1e372-f9d9-11e0-aba9-9415ab1a8034"; 
            placeinfo =                 { 
                latitude = "12.5846738815"; 
                longtitude = "55.6815948486"; 
                "place_id" = "3cc1e372-f9d9-11e0-aba9-9415ab1a8034"; 
            }; 
            timestamp = "2011-10-19 00:33:44"; 
        }; 
    }, 
            { 
        place =             { 
            "place_id" = "b65e36e0-f9d9-11e0-aba9-9415ab1a8034"; 
            placeinfo =                 { 
                latitude = "12.5720376968"; 
                longtitude = "55.6785774231"; 
                "place_id" = "b65e36e0-f9d9-11e0-aba9-9415ab1a8034"; 
            }; 
            timestamp = "2011-10-19 00:37:08"; 
        }; 
    } 
); 
updateData =     { 
    timestamps =         { 
        "latest_update" = "2011-10-18 17:12:09"; 
        uuid = "8c6fb842-f99b-11e0-aba9-9415ab1a8034"; 
    }; 
};} 

Ajout d'un type de clé primaire pour les lieux -.> PlaceList et updateData pour horodatages

J'ai aussi besoin de changer le keypath pour le fournisseur pour refléter le changement à l'entrée JSON:

// Register mapping with the provider - 
[self.objectManager.mappingProvider setMapping:self.placeManagedObject forKeyPath:@"placeList.place"]; 
[self.objectManager.mappingProvider setMapping:self.placeInfoManagedObject forKeyPath:@"placeinfo"]; 
[self.objectManager.mappingProvider setMapping:self.latestDBUpdateManagedObject forKeyPath:@"updateData.timestamps"]; 

Il a résolu. Plus d'objets NULL, cartographié, toi je ne suis pas tout à fait comprendre pourquoi le changement du JSON fait un gros différence dans la mise en correspondance.

Autres conseils

Tout d'abord, il serait plus utile si vous avez publié JSON valide pour poser une question comme ça -. Vous auriez probablement obtenir plus de réponses

En second lieu, la question principale de votre première tentative est le regroupement de l'objet Timestamps dans le cadre du tableau de sourceObject. Vous avez probablement obtenu ce que vous voulez avec les éléments suivants à la place:

{
    "sourceObject": [
        {
            "place": {
                "place_id": "3cc1e372-f9d9-11e0-aba9-9415ab1a8034", 
                "placeinfo": {
                    "latitude": "12.5846738815", 
                    "longtitude": "55.6815948486", 
                    "place_id": "3cc1e372-f9d9-11e0-aba9-9415ab1a8034"
                }, 
                "timestamp": "2011-10-19 00:33:44"
            }
        }, 
        {
            "place": {
                "place_id": "b65e36e0-f9d9-11e0-aba9-9415ab1a8034", 
                "placeinfo": {
                    "latitude": "12.5720376968", 
                    "longtitude": "55.6785774231", 
                    "place_id": "b65e36e0-f9d9-11e0-aba9-9415ab1a8034"
                }, 
                "timestamp": "2011-10-19 00:37:08"
            }
        }
    ],
    "Timestamps": {
        "latest_update": "2011-10-18 17:12:09", 
        "uuid": "8c6fb842-f99b-11e0-aba9-9415ab1a8034"
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top