2013-07-28 5 views
0

J'utilise RestKit pour mapper le JSON suivant aux données de base.Mappage de Relation RestKit Plusieurs à plusieurs Erreur de relation de relation de données de base

J'ai une relation plusieurs-à-plusieurs configurée dans les données de base.

Une trémie peut avoir de nombreux utilisateurs et un utilisateur peut avoir plusieurs trémies.

Je reçois ce message d'erreur:

(entité:. Hopper; id: 0x767d240

hopperToUsers = <relationship fault: 0x8352960 'hopperToUsers' ; 

Donc aucun de mes utilisateurs sont mis à jour

JSON :

{ 
    "hoppers": [{ 
     "bearing": 0, 
     "created_at": "2013-07-26T07:57:00Z", 
     "distance": 0.0, 
     "id": 4, 
     "lat": "30.422032", 
     "lng": "-86.617069", 
     "name": "Fort Walton Beach", 
     "updated_at": "2013-07-26T07:57:00Z", 
     "users": [{ 
      "avatar_url": null, 
      "created_at": "2013-07-26T21:37:21Z", 
      "id": 1, 
      "link": "http:/example.com/savetheday", 
      "name": "Clark Kent", 
      "post": " I once reported a heinous crime here. Superman came to the rescue!", 
      "thumbnail_url": null, 
      "updated_at": "2013-07-26T21:37:21Z" 
     }, { 
      "avatar_url": null, 
      "created_at": "2013-07-26T21:37:57Z", 
      "id": 2, 
      "link": "http:/example.com/villaincaught", 
      "name": "Lex Luther", 
      "post": " I got busted here. Almost took over the world!", 
      "thumbnail_url": null, 
      "updated_at": "2013-07-26T21:37:57Z" 
     }] 
    }] 
} 

Mon code, qui suit l'exemple de demande d'objet géré dans le README RestKit https://github.com/RestKit/RestKit.

je réalise mon NSURL doit être changé pour les params, mais Hopper semble carte OK:

`[managedObjectStore createManagedObjectContexts]; 
RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:@"User" inManagedObjectStore:managedObjectStore]; 
[userMapping addAttributeMappingsFromDictionary:@{ @"avatar_url":   @"avatarURL"   , 
                 @"created_at":    @"createdAt", 
                @"link":    @"jsonURL", 
                @"post":    @"post", 
                @"thumbnail_url":  @"thumbnailURL", 
                @"updated_at":   @"updatedAt", 
                @"id":     @"userID"}]; 
RKEntityMapping *hopperMapping = [RKEntityMapping mappingForEntityForName:@"Hopper" inManagedObjectStore:managedObjectStore]; 
[hopperMapping addAttributeMappingsFromDictionary:@{ @"id":    @"hopperID", 
                 @"lat":   @"lat", 
                 @"lng":   @"lng", 
                 @"name":   @"name", 
                 @"created_at":  @"createdAt", 
                 @"distance":  @"distance"}]; 

[hopperMapping addPropertyMapping:[RKRelationshipMapping  relationshipMappingFromKeyPath:@"hopperToUsers" toKeyPath:@"hopperToUsers" withMapping:userMapping]]; 

NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:hopperMapping method:RKRequestMethodAny pathPattern:nil keyPath:@"hoppers" statusCodes:statusCodes]; 

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:3000/hoppers.json?lat=30.422032&lng=-86.617069"]]; 
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]]; 
operation.managedObjectContext = managedObjectStore.mainQueueManagedObjectContext; 
operation.managedObjectCache = managedObjectStore.managedObjectCache; 
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation,  RKMappingResult *result) { 
    Hopper *hopper= [result firstObject]; 
    NSLog(@"Mapped the hopper: %@", hopper); 
    NSLog(@"Mapped the user: %@", [hopper.hopperToUsers anyObject]); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"Failed with error: %@", [error localizedDescription]); 
}]; 
NSOperationQueue *operationQueue = [NSOperationQueue new]; 
[operationQueue addOperation:operation];}` 

Répondre

1

Lorsque vous appelez addPropertyMapping et créer la cartographie des relations, le ...FromKeyPath concerne la JSON il devrait donc être défini sur @"users".

+0

Merci pour la réponse rapide. Quand je fais ça, ça dit ... l'entité Hopper n'est pas compatible avec le codage de valeur de clé pour les "utilisateurs" clés. ' –

+0

Ensuite, les keypaths devraient être à l'envers, RestKit doit savoir où trouver les données dans le JSON et où les placer dans l'objet. – Wain

+0

Oh. Merci pour la clarification sur le mappage addProperty. J'ai deKetPath: @ "users" et toKeyPath: hoppersToUsers (ma relation dans les données de base) .. espérons que c'est juste. Maintenant, je reçois des erreurs de réponse à propos de l'URL. Donc, ce problème est résolu, et je verrai ce qui se passe lorsque je répare le NSURL. Je te donnerais un up mais c'est mon premier post! –

Questions connexes