2011-06-01 5 views
1

juste essayer de s'habituer au repos pour les applications iPhone ici pour le moment et ive frapper un mur. Im essayant d'obtenir des données d'un fichier json imbriqué.imbriqué json avec restkit sur l'iphone

[ 
{"person": { 
    "name": "joe", 
    "id": "1234", 
    "numbers": 
     [ 
      {"value": "555-12125"}, 
      {"value": "222-12125"} 
     ] 
    } 
}] 

i mis en place le rkobjectmanager comme si

RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:3000"]; 
[manager loadObjectsAtResourcePath:@"/J.json?user_id=36995582&planner=insta-grammar" objectClass:[Person class] delegate:self] ; 

[manager registerClass:[Person class] forElementNamed:@"person"]; 
[manager registerClass:[Numbers class] forElementNamed:@"numbers"]; 

alors la classe personne et numéros de classe comme suit

#import "Person.h" 


@implementation Person 

@synthesize _name,_id,_number; 

+ (NSDictionary*)elementToPropertyMappings { 
    return [NSDictionary dictionaryWithKeysAndObjects: 
      @"name",@"name", 
      @"id",@"id",nil]; 
} 




+ (NSDictionary*)elementToRelationshipMappings { 
    return [NSDictionary dictionaryWithKeysAndObjects: 
      @"numbers", @"numbers", 
      nil]; 
} 

@end 


#import "Numbers.h" 


@implementation Numbers 

@synthesize _number; 

+ (NSDictionary*)elementToPropertyMappings { 
    return [NSDictionary dictionaryWithKeysAndObjects: 
      @"value",@"value",nil]; 
} 

+ (NSString*)primaryKeyProperty { 
    return @"value"; 
} 
+ (NSDictionary*)relationshipToPrimaryKeyPropertyMappings { 
    return [NSDictionary dictionaryWithObject:@"value" forKey:@"value"]; 
} 



@end 

mais chaque fois que le numéro_de_port reste vide après la fonction didloadobjects est appelée tandis que les variables nom et identifiant se remplissent bien. des idées à ce sujet? ive a essayé l'exemple sur git mais ne pouvait pas le faire fonctionner donc toute aide serait appréciée. grâce g

Répondre

3

Ce que vous devez faire est de déclarer une variable membre NSArray *_numbers en Person.h, en faire une propriété comme @property (nonatomic, retain) NSArray *_numbers et synthétiser dans Person.m comme @synthesize numbers = _numbers. Ensuite, vous pouvez vous débarrasser de ce que _number est, puisque vous ne stockez pas un seul objet numérique, vous allez stocker un tableau d'objets numériques.

Votre classe Numbers devrait plutôt être simplement Number, et vous devriez synthétiser votre variable numérique comme @synthesize number = _number;. Ainsi, votre Number.m devrait ressembler à

@implementation Number 
@synthesize number = _number; 

+ (NSDictionary *)elementToPropertyMappings { 
    return [NSDictionary dictionaryWithKeysAndObjects: 
      @"value", @"number", nil]; 
} 

Parce que votre propriété est le numéro, la valeur du dictionnaire de cartographie est @"number", alors que votre principale source JSON doit être @"value".

Ensuite, vous pouvez charger les objets tels que (notez que nous utilisons notre Number classe pour l'élément @"numbers"):

RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:3000"]; 
[manager registerClass:[Person class] forElementNamed:@"person"]; 
[manager registerClass:[Number class] forElementNamed:@"numbers"]; 

[manager loadObjectsAtResourcePath:@"/J.json?user_id=36995582&planner=insta-grammar" delegate:self]; 

Pour un exemple complet voir le Catalog Example int le projet github RestKit

+0

Non ça ne fonctionne toujours pas. en fait, la classe de nombres ne s'appelle même jamais. ive a essayé l'exemple du catalogue et a utilisé ses classes à la place des miennes et les a appelées de la même manière que dans l'exemple et toujours pas de joie. il ne charge toujours que dans les données non-array. – glogic

0

Juste pour quelqu'un suivi à ce sujet. Finalement tout a fonctionné en utilisant le nouvel OM2 qu'ils viennent de sortir avec le kit de récupération. très agréable et facile à utiliser changement

+2

À mon avis, je pense que vous auriez dû accepter la réponse de bensnider plutôt que la vôtre puisqu'il a répondu à votre question particulière. Certes, OM2 est un meilleur moyen de s'en sortir mais sa réponse traite des circonstances présentées dans votre question. –

+1

Je vois votre point de vue mais je l'ai essayé comme bensnider l'a dit et cela n'a toujours pas fonctionné pour moi. la réponse qu'il a donné peut avoir été 100% juste mais si cela n'a pas fonctionné pour moi je ne vois pas comment je peux voter comme droit désolé. – glogic

+0

Salut, pouvez-vous poster une solution? – Darmen