Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
restkit:mapper_des_donnees_imbriquees [2012/12/03 12:02] djiko créée |
restkit:mapper_des_donnees_imbriquees [2016/10/17 13:56] (Version actuelle) |
||
---|---|---|---|
Ligne 14: | Ligne 14: | ||
</code> | </code> | ||
- | On souhaite parser ce contenu et en intégrer les données dans des entités Coredata pour gérer un cache local. La récupération des données imbriquées n'est pas aussi simple qu'elle en a l'air avec Restkit. Du moins n'ai-je pas trouvé de moyen simple... En effet, dans l'objet //EntiteFille//, il n'existe pas de moyen d'identifier chacun des attributs. //EntiteFille// est une collection d'objets rattachés à //EntiteMaitre//. | + | On souhaite parser ce contenu et en intégrer les données dans des entités Coredata pour gérer un cache local. La récupération des données imbriquées n'est pas aussi simple qu'elle en a l'air avec Restkit. Du moins n'ai-je pas trouvé de moyen simple... En effet, dans l'objet //EntiteFille//, il n'existe pas de moyen d'identifier chacun des attributs. //EntiteFille// est une collection d'objets non identifiés rattachés à //EntiteMaitre//. |
===== Proposition de solution ===== | ===== Proposition de solution ===== | ||
==== Dans Coredata ==== | ==== Dans Coredata ==== | ||
- | On crée une entité //EntiteMaitre à laquelle on associe un attribut //EntiteFille// | + | On crée une entité //EntiteMaitre// à laquelle on associe un attribut //EntiteFille// de type [[https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdNSAttributes.html|transformable]]. Une fois générée sous la forme de NSManagedObject, la classe présente la forme suivante : |
+ | <code objc> | ||
+ | @interface EntiteMaitre : NSManagedObject | ||
- | ==== Dans notre classe ==== | + | @property (nonatomic, retain) id EntiteFille; |
+ | |||
+ | @end | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Mapping avec Restkit ==== | ||
+ | EntiteFille étant un attribut, le mapping est alors simple : | ||
+ | <code objc> | ||
+ | RKManagedObjectMapping *entiteMapping = [RKManagedObjectMapping mappingForClass:[EntiteMaitre class] | ||
+ | inManagedObjectStore:[[[RKObjectManager sharedObjectManager] objectManager] objectStore]]; | ||
+ | |||
+ | [hotelMapping mapKeyPathsToAttributes: | ||
+ | @"AttrEntiteFille", @"EntiteFille", // Mapping des AttrEntiteFille | ||
+ | nil]; | ||
+ | |||
+ | </code> | ||