Quelles sont les bonnes pratiques pour tirer asynchroneusement de grandes quantités de XML à partir d'un service reposant dans un magasin de données de base, et à partir de ce magasin, peuplez un Je pense à utiliser En même temps que ces nœuds XML sont transformés en objets gérés, je souhaite générer des lignes code> uableview code>, à son tour. Dis, 50 rangées à la fois. Est-ce réaliste? p>
Dans votre expérience, que faites-vous pour accomplir cette tâche pour maintenir la performance et la gérer, potentiellement des milliers de lignes? Existe-t-il des approches différentes plus simples qui fonctionnent aussi bien ou mieux? P> utableview code> à la volée? p>
xmlparsechunk () code> pour analyser les morceaux de XML entrant et traduire un nœud et ses enfants dans les objets gérés concernés, car les nœuds entrent. P>
3 Réponses :
Joe Hewitt (développeur d'applications Facebook) a libéré une grande partie de son code comme open-source. C'est ce qu'on appelle Three20 . Il y a une classe là-bas qui convient à la recherche de données Internet et à la renseigner dans une table, sans avoir besoin de la nécessité des données. Les classes utilisées pour cela s'appellent TTTableViewController et < un href = "http://github.com/joehewitt/three20/blob/master/src/three20/tttableviewdataSource.h" rel = "nOfollow Noreferrer"> TTTableViewAsource . P>
D'ici, il ne serait pas une grande partie d'un étirement de stocker comme Coredata, il suffit de sous-classer les classes que vous voyez en forme avec les crochets fournis. P>
Si vous êtes inquiet de trop de données, 50 à la fois sonnent raisonnable. Ces classes ont un bouton "plus" intégré pour vous aider. P>
Du trois20 Readme: P>
Consommation de la table de la table de table Internet forte>
TTTableViewController et TTTableViewDataSource vous aider à Construire des tables qui chargent leur contenu de l'Internet. Plutôt que juste en supposant que vous ayez toutes les données prêtes aller, comme UitailView fait par Par défaut, TTTableViewController permet vous communiquez lorsque vos données sont chargement, et quand il y a une erreur ou rien à afficher. Cela vous aide aussi Pour ajouter un bouton "plus" pour charger le Page suivante des données, et éventuellement soutient recharger les données en tremblant l'appareil. P> blockQuote>
Je suppose que je ne suis pas clair. En fait, je souhaite peupler un magasin de données de base, qui remplit à son tour une vue de table. Il n'est pas clair que cette sous-classe résout ce problème particulier, s'il tire la cellule de données par cellule (ce qui n'est pas ce que je dois accomplir).
Bien sûr, c'est une jolie chose standard. La solution la plus simple consiste à effectuer le chargement dans un fil d'arrière-plan sur un MOC et à faire fonctionner l'interface utilisateur sur le fil principal avec son propre MOC. Chaque fois que vous obtenez un morceau de données que vous souhaitez apparaître (disons 50 entrées), vous avez l'arrière-plan MOC En supposant que vous avez le premier plan MOC à fusionner des modifications (via En général Coredata va être plus rapide que tout ce que vous vous retrouvez à moins que vous sachiez vraiment ce que vous faites et que vous êtes prêt à passer une tonne de réglage du temps pour votre cas spécifique. La chose la plus importante que vous puissiez faire est de vous assurer que des choses lentes (comme le traitement XML et les E / S synchrones causées par Enregistrer: code>. p>
MergechangesfromContextDidSacotification: code>) alors chaque fois que vous sauvegardez l'arrière-plan MOC, le MOC du premier plan obtiendra toutes ces modifications. En supposant que vous utilisiez NsfetchedResultController, il possède des méthodes de délégation pour faire face aux modifications de son MOC, et si vous utilisez le code d'exemple d'Apple, vous avez probablement déjà tout ce qui est configuré correctement. P>
Enregistrer: code>) ne sont pas sur l'interaction utilisateur du fil principal. P>
+1, mais j'adorerais Pit sqlitepp.berlios.de contre Coredata dans un non-Holds- match de mort barré à voir ce qui est plus rapide
Je peux absolument (et avoir) Baten CD sur des charges de travail spécifiques à l'aide de SQLite3 directement. Mais généralement, la quantité d'efforts impliquée était obscène. J'aurais fini par une meilleure application en utilisant Coredata, puis en prenant 1 / 3ème du temps, j'ai sauvegardé le réglage d'autres pièces de mon application. Nous n'écrivons pas de code dans un vide. J'ai appris la difficulté, il est souvent préférable d'abandonner des performances théoriques absolues et d'utiliser les économies de temps pour faire des améliorations de performance pratiques (plus grandes) à d'autres pièces d'un code d'applications. Évidemment, les détails exacts varient du projet au projet.
Existe-t-il un exemple de code qui démontre l'utilisation de plusieurs MOC avec des modifications fusionnées à une MOC principale?
personne n'a mentionné Restkit encore? Mes amis ... sérieusement, vous devez vérifier cela. Si vous faites quelque chose avec repos sur iOS (et maintenant sur OS X) et en particulier si vous souhaitez travailler avec des données de base ... S'il vous plaît jeter un oeil à Reinkit. J'ai sauvegardé d'innombrables heures en mettant en œuvre une synchronisation de données assez complexes entre un serveur et mes modèles de données de base sur iOS. Restkit l'a rendu tellement fatigué, il vous rend presque malade. P>
Restkit semble lutter avec XML - L'analyseur XML est livré avec des erreurs d'arc lors de la compilation sur iOS 5. Dans l'ensemble, il a l'air génial, en particulier pour le JSON droit.
Vous pourriez trouver Cocoawithlove.com/2009/09/... utile.