J'utilise le framework RestKit et je veux faire une requête HTTP POST. La réponse est JSON. Je veux mettre la réponse JSON automatiquement dans le CoreData.
Je ne sais pas exactement quelles methods appeler pour faire la request. Je sais que je devrais utiliser les methods de RKObjectManager
mais je n'ai pas trouvé le bon.
J'ai trouvé cette méthode postObject:delegate:
mais je ne sais pas ce que l'object à passer en paramètre. Je trouve aussi cette méthode dans la documentation: loadObjectsAtResourcePath:usingBlock:
mais je ne peux pas l'utiliser parce qu'il me dit:
No visible @interface for 'RKObjectManager' declares the selector 'loadObjectsAtResourcePath:usingBlock:'
Vlad – Tout d'abord, mettons en place une réponse à votre question initiale:
Je suppose que vous travaillez sur RestKit 0.20.0, mais connaissez les API RestKit 0.10.x et consultez des informations obsolètes. Le premier endroit que vous devriez utiliser est RKObjectManager.h
– les en-têtes seront toujours à jour et contiendront des documents sur les methods disponibles. Ensuite, vous pouvez toujours afficher la dernière documentation générée à partir du code source sur le dernier site de documentation de l'API .
Ce que vous voulez faire ici, c'est créer un RKObjectRequestOperation
:
NSDictionary *dictionary = @{ @"firstParam": @(12345), @"secondParam": @"whatever"}; NSMutableURLRequest *request = [objectManager requestWithObject:nil method:RKRequestMethodPOST path:@"/whatever" parameters:parameters]; RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request success:^(RKObjectRequestOperation *operation, RKMappingResult *result) { NSLog(@"Loading mapping result: %@", result); } failure:nil];
Si vous essayez de cibler datatables de base, alors vous voudrez utiliser RKManagedObjectRequestOperation
et managedObjectRequestOperationWithRequest:success:failure:
Il existe d'autres exemples disponibles dans le file README.md sur le site Restithit Github et dans les documents d'en-tête, ainsi qu'une tonne mésortingque de code dans les tests unitaires pour reference.
Ensuite, en réponse aux commentaires de JRG-Developer:
Ahem, c'est une réponse vraiment terrible pour un certain nombre de raisons. (Disclaimer: Je suis le développeur principal de RestKit)
Tout d'abord, quelle version de RestKit utilisez-vous? Si vous utilisez une version récente (c'est-à-dire dans la série de versions préliminaires 0.20.x), les methods de chargement des collections d'objects ont été remplacées par de meilleurs noms: getObjectsAtPath:
Ceci est entièrement documenté dans la documentation de l'API ( Making Requests by Path ) et dans le guide de migration de 0.10 à 0.20 .
Je soupçonne que le problème original provient de la reference à la documentation désuète avec le code récent.
Ensuite, la stack de technologies que vous recommandz est beaucoup plus compliquée à installer et à utiliser pour accomplir les mêmes choses que RestKit vous offre une fois que vous avez compris la bibliothèque.
Jetons un coup d'oeil à ce point par point:
AFNetworking
JSONKit
NSJSONSerialization
, la vitesse d'parsing JSON de JSONKit est supérieure – mais seulement en millisecondes. MagicalRecord
Alors parlons des vrais problèmes avec l'implémentation d'une application iOS / OS X qui modélise une API dans Core Data pour un instant:
AFJSONRequestOperation
vous renvoie dans le bloc de succès et mettez à jour Core Data, n'est-ce pas? Faux. Maintenant, vous effectuez vos E / S réseau de manière asynchronous, puis effectuez la tâche CPU intensive de mise à jour de votre model de données sur le thread principal. Maintenant, la performance de votre application est nulle et vous ne savez pas quoi faire à ce sujet. Comment déplacez-vous cette synchronisation en arrière-plan? Comment notifiez-vous l'interface user une fois que c'est fait? Il y a un certain nombre de problèmes supplémentaires auxquels vous devrez faire face une fois votre application réussie, y compris la testabilité, la maintenabilité, etc. À quel point pensez-vous à ces choses?
Je pense que mon point principal est que c'est (de mon sharepoint vue) beaucoup trop commun pour entendre des acclamations ou des railleries venant de la galerie d'arachides sur la façon de résoudre les problèmes d'ingénierie fondamentaux. La réalité est que la solution aux problèmes de complexité essentielle aura une courbe d'apprentissage relative à celle du problème à aborder.
Il est de loin, beaucoup plus facile de prendre une part discrète de la fonctionnalité et de find une solution satisfaisante que d'essayer d'aborder un problème plus grand, mais plus intéressant.
Mais cela ne signifie pas que vous allez produire une solution plus robuste en rassemblant un tas de bibliothèques que vous avez entendues fournir de bonnes implémentations d'un sous-set d'un problème qu'une approche plus large du problème global.
Pourquoi personne n'a-t-il ouvert son propre mashup AFN / JSONKit / Core Data / MagicalRecord et soufflé RestKit hors de l'eau s'ils sont tellement mieux que RestKit?
J'ai peur que la vérité sobre soit: ce n'est pas si facile.
À votre santé!