2012-09-13 2 views
0

Comment gérer un keypath nul (attendu) pendant un Restart GET?RestKit - Réponse JSON de la carte avec une valeur nulle/un tableau vide

Lorsque j'effectue un appel d'API getAllEvents si l'utilisateur n'a aucun événement, l'API renvoie une valeur nulle dans la charge utile, par ex. {"events":null}. La valeur null provoque l'appel des méthodes RestKit request: didFailLoadWithError et objectLoader: didFailWithError, ce que je ne souhaite pas forcément car il s'agit du comportement attendu où il y a 0 événements. Le message d'erreur qu'il donne est Could not find an object mapping for keyPath: ''. Puis-je gérer cela dans les méthodes de config mapping et/ou de délégué, ou dois-je modifier l'API, peut-être pour retourner une chaîne vide au lieu de null. Existe-t-il une norme pour ce que JSON devrait renvoyer lorsque la liste est vide?

Répondre

2

Existe-t-il un standard pour ce que JSON devrait renvoyer lorsque la liste est vide?

Je ne sais pas actualy, mais je partirais avec un tableau vide:

{ 'events' : [] } 

Si une valeur est nulle, je tout simplement pas l'envoyer du tout [bande passante d'économie].

EDIT: see this answer too.

1

MISE À JOUR: Cela ne fonctionne plus au-delà de RestKit v0.10.x. Voir la réponse @ moonwave99.

Trouvé une solution!

J'ai fini par faire quelque chose de très similaire à la suggestion de moonwave, sauf que je change maintenant l'objet nul en un tableau vide. Pour gérer avec succès le tableau maintenant vide et non nul, j'ai dû indiquer au mappage des événements d'ignorer les chemins de clé inconnus.

[eventsMapping setIgnoreUnknownKeyPaths:YES]; 

Maintenant, au lieu d'invoquer la méthode déléguée didFailWithError, RestKit invoque didLoadObjects comme je l'avais prévu/espéré tout au long. De là, je suis capable de vérifier si le tableau est vide avant d'essayer d'assigner à mon objet Cocoa natif.

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 

    if ([objects count] == 0) { 

    // No events, alert user 

    } 
    else if ([[objects objectAtIndex:0] isKindOfClass:[Events class]]) { 

    Events *events = [objects objectAtIndex:0]; 

} 
Questions connexes