J'ai un graphique d'objet de données de base (composé de deux entités liées par une relation à plusieurs).
J'étais curieux, en tant que développeur iPhone relativement inexpérimenté, si quelqu'un pouvait recommander une approche et une implémentation JSON appropriée pour l'iPhone, ce qui me permettrait de:
convertir les enregistrements de données de base en une chaîne JSON (tout en maintenant la relation entre les entités); et
reconvertissez la chaîne JSON en objets de données de base (encore une fois en préservant la relation entre les entités).
J'ai recherché, sans succès, un exemple de tutoriel / code sur ce point afin que toute aide soit reçue avec gratitude.
iphone
objective-c
json
core-data
Urizen
la source
la source
NSJSONSerialization
developer.apple.com/library/mac/#documentation/Foundation/... stackoverflow.com/questions/6726899/nsjsonserialization-in-ios5Réponses:
Tout d'abord, choisissez une bibliothèque JSON à utiliser, personnellement, j'aime TouchJSON, mais plusieurs autres sont également très bien. La partie compliquée, bien que pas très difficile, est de convertir vos objets gérés en structures appropriées pour la conversion. J'ai écrit ça très vite donc il peut y avoir une erreur ou deux :)
Les méthodes que vous appelez sont:
Et la mise en œuvre est la suivante:
Maintenant, c'est récursif, vous pouvez donc facilement traduire l'ensemble de votre magasin persistant si vous ne faites pas attention. Surveillez vos relations et assurez-vous qu'elles «descendent» uniquement dans l'arborescence des objets afin de ne récupérer que les objets que vous souhaitez traduire.
la source
Je voulais juste souligner une petite faute de frappe, qui a provoqué le blocage du code, et j'espère que cela vous fera gagner quelques minutes.
le
NSMutableArray *dataArray = [[NSArray alloc] init]; // This should be NSMutableArray
devrait vraiment être
NSMutableArray *dataArray = [[NSMutableArray alloc] init];
c'est tout.
Merci
la source
La synchronisation des données de base avec des rails est une présentation détaillée qui comprend un exemple de code pour sérialiser / désérialiser vos objets Core Data vers / depuis JSON (passez à la diapositive 55 pour la partie Core Data). Son exemple de code suppose un modèle assez simple sans relations, même si je pense qu'il serait assez facile à étendre.
La présentation donne également des détails sur la synchronisation de votre modèle Core Data avec une application Web basée sur REST, avec des pointeurs vers certaines bibliothèques utiles, notamment ObjectiveResource et ASIHTTPRequest . Je ne sais pas si c'est ce que vous essayez de faire, mais cela vaut même le coup d'œil pour le code Core Data.
la source
Si vous avez un
NSDate
dans votre objet géré, comme mentionné ci-dessus dans l'un des commentaires, vous aurez des problèmes pour sérialiser l'objet contenant leNSDate
. Une solution simple consiste à ajouter uneJSONDataRepresentation
méthode àNSDate
utiliser les catégories objective-c.Ajoutez ces deux fichiers à votre projet:
NSdate.h:
NSDate.m:
la source
Il existe une bibliothèque qui effectue la synchronisation JSON pour vous: https://github.com/sixdegrees/lidenbrock
la source
Je suis tombé sur ce post qui fonctionne très bien.
http://touchalicious.com/blog/2009/10/25/turn-core-data-models-into-json.html
Comme c'est récursif, les relations plusieurs-à-plusieurs vont continuer à se boucler. Pour éviter cela, j'ai ajouté une clé "isExportable" au dictionnaire d'informations utilisateur des relations dans mon modèle Core Data. Vous pouvez ensuite vérifier cette clé et choisir de ne pas parcourir les relations sans elle.
la source
Je pensais juste publier une mise à jour rapide de cette question. J'ai suivi les réponses de Marcus et Brandon et j'ai proposé ceci pour l'exportation JSON (il utilise toujours TouchJSON):
Je ne pouvais pas faire fonctionner l'importation, peut-être que cela a quelque chose à voir avec le fait que j'utilise Magical Record, je ne suis pas sûr, donc je fais une boucle sur le flux JSON entrant et crée des objets manuellement ...
la source
Marcus S. Zarra m'a inspiré pour amener l'idée récursive à une version de travail. Dans cette version, vous n'avez pas besoin de définir une clé dans CoreData et vous pouvez la couper et la coller dans votre projet :-)
La clé ici est de transmettre l'entité parente comme argument à la récursivité, afin que nous puissions décider quelle relation nous devons remplir avec des données. Ainsi, les deux fonctions:
dataStructureFromManagedObject
etmanagedObjectFromStructure
peuvent encoder et décoder n'importe quel objet d'entité de CoreData dans un dictionnaire et de nouveau dans un objet.la source