2010-05-18 5 views
0

Je travaille sur un projet dans lequel une vue de table est actuellement mise à jour via une requête Web qui renvoie du XML. Je mis en œuvreMise à jour d'un TableView avec un WebService et enregistrement dans CoreData

-(int)numberOfRowsInTableView:(NSTableView*)tv 

et

-(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)row 

dans ma classe d'analyse syntaxique XML, et ont la table mis à jour avec les données qui sont tiré vers le bas à partir du serveur. Je veux enregistrer les données qui sont tirées à l'aide de données de base, de sorte que la table peut être sauvegardée/chargée. Ensuite, plus tard au démarrage de l'application lorsque la requête Web est faite, il ne fera qu'ajouter des données qui ne sont pas déjà présentes. (Le XML est trié par date de publication, donc je vérifierai plus tard quelles dates de publication ne sont pas chargées depuis le magasin de données principales, et ne chargeront que les nouvelles entrées.)

Comment procéder? Je suis un tout nouveau développeur de Cocoa, mais j'ai parcouru tout le livre de Hillegass. Merci beaucoup.

Répondre

2

Il y a deux grandes choses dont vous parlez ici: l'analyse XML et la persistance avec les données de base.

(1) J'ai eu un certain succès en utilisant this wrapper autour de NSXMLParser pour lire les fichiers XML. J'ai entendu parler mais je n'ai pas utilisé de bibliothèques plus récentes, mais cela pourrait constituer un point de départ pour vous. L'article lié est assez complet sur l'utilisation.

(2) La première chose que vous voudrez faire avec Core Data est de créer un nouveau modèle de données. À partir de là, vous pouvez créer une classe de modèle (avec les propriétés @dynamic) pour interagir facilement avec votre base de données via les données de base (en utilisant des éléments tels que NSManagedObjectContext et ses semblables). Vous pouvez obtenir une introduction en douceur here, ou sauter un peu plus loin le long here. La mise en œuvre des données de base est non triviale, en particulier pour les développeurs plus récents. Je vous encourage à rechercher des tutoriels sur des sujets particuliers au fur et à mesure qu'ils se présentent.

+0

Merci pour le conseil. À l'heure actuelle, j'ai quelque peu fonctionné, mais j'ai l'impression d'utiliser des données de base de façon extrêmement archaïque (créer des objets gérés, définir leurs valeurs, utiliser des recherches de prédicats pour obtenir les objets dont j'ai besoin ...). Je pense que l'utilisation des propriétés @dynamic peut simplifier ce que je fais maintenant. – jcady

+0

Les propriétés dynamiques sont des raccourcis utiles, similaires dans un sens aux propriétés synthétisées. Ce que vous décrivez ne semble pas nécessairement archaïque. Dans tous les cas, vous devrez écrire du code de collage pour transformer des objets de la description XML en entités gérées dans Core Data, ce qui ressemble à votre approche. – warrenm

+0

Les programmeurs Mac comme le questionneur n'ont pas besoin de ce wrapper, car Cocoa, à la différence de Cocoa Touch, a déjà une classe NSXMLNode. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/ –

1

Je suis dans le même bateau que vous en ce moment - je suis en train d'apprendre Cocoa, j'ai lu le livre Hillegass, et je construis une application Core Data qui tire d'un service Web. J'ai trouvé comment obtenir mon application remplissant une vue de table d'un service Web avec succès, mais je n'ai aucune idée si ma façon de faire est la bonne manière ou les meilleures pratiques. Voici ce que j'ai fait:

J'ai créé un modèle de base de données avec les mêmes attributs que l'entité provenant du service Web. Dans Interface Builder, j'ai créé une vue de table et configuré les liaisons entre les colonnes de la table et les attributs de données de base. Lorsque l'application est lancée, je retire les données du service Web, fais une boucle sur les éléments et crée de nouvelles entités. La vue de table reconnaît alors automatiquement les nouvelles données et se remplit elle-même.

Le Core Data book from Pragmatic Programmers, ainsi que cette question à la fois m'a aidé: JSON to Persistent Data Store (CoreData, etc.)

Je n'ai pas abordé la question de la synchronisation (l'ajout de nouveaux éléments, la mise à jour existante) mais je possède ce doc bookmarked quand je fais: http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html#//apple_ref/doc/uid/TP40003174

+0

Merci pour le conseil. Basé sur les réponses ici et quelques tutoriels que j'ai lus, je fais une chose semblable. Je boucle sur les noeuds XML et crée des objets gérés appropriés. – jcady

Questions connexes