pods library eureka custom best iphone parsing uitableview core-data libxml2

iphone - library - Buenas estrategias para REST-> XML-> Datos principales-> UITableView?



swift libraries (3)

¿Cuáles son las buenas prácticas para extraer asincrónicamente grandes cantidades de XML de un servicio RESTful en una tienda Core Data, y de esta tienda, UITableView una UITableView sobre la marcha?

Estoy pensando en usar la función xmlParseChunk() de xmlParseChunk() para analizar fragmentos de XML entrantes y traducir un nodo y sus elementos xmlParseChunk() en los objetos gestionados relevantes, a medida que entran los nodos.

Al mismo tiempo que estos nodos XML se convierten en objetos administrados, quiero generar filas UITableView , a su vez. Digamos, 50 filas a la vez. ¿Esto es realista?

En su experiencia, ¿qué hace para lograr esta tarea, para mantener el rendimiento y manejar, potencialmente, miles de filas? ¿Existen enfoques diferentes y más simples que funcionan tan bien o mejor?


Joe Hewitt (desarrollador de aplicaciones de Facebook) ha lanzado gran parte de su código como de código abierto. Se llama Three20 . Hay una clase allí que es excelente para buscar datos de Internet y llenarlos en una tabla, sin la necesidad de los datos de antemano. Las clases utilizadas para esto se denominan TTTableViewController y TTTableViewDataSource .

A partir de aquí, no sería muy difícil almacenar como CoreData, solo subclase las clases como mejor le parezca con los ganchos provistos.

Si le preocupan demasiados datos, 50 a la vez suenan razonables. Estas clases tienen incorporado un botón "Más" para ayudarte.

Del readme Three20:

Controladores de vista de tabla con reconocimiento de Internet
TTTableViewController y TTTableViewDataSource lo ayudan a crear tablas que cargan su contenido de Internet. En lugar de asumir que tiene todos los datos listos para usar, como UITableView lo hace de forma predeterminada, TTTableViewController le permite comunicarse cuando se cargan sus datos y cuando hay un error o nada que mostrar. También le ayuda a agregar un botón "Más" para cargar la siguiente página de datos, y opcionalmente admite volver a cargar los datos agitando el dispositivo.


Claro, esto es algo bastante estándar. La solución más sencilla es cargar en un hilo de fondo en un MOC y hacer que la UI se ejecute en el hilo principal con su propio MOC. Siempre que obtenga una porción de datos que desea que aparezcan (digamos 50 entradas), tiene el fondo MOC save:

Suponiendo que tiene el MOC de primer plano amañado para fusionar los cambios (a través de mergeChangesFromContextDidSaveNotification: , cada vez que guarde el MOC de fondo, el MOC de primer plano obtendrá todos esos cambios. Suponiendo que está utilizando NSFetchedResultsController tiene métodos de delegado para hacer frente a los cambios en su MOC, y si está utilizando el código de ejemplo de Apple, es probable que ya tenga todo configurado correctamente.

En general, CoreData va a ser más rápido que cualquier cosa que enrolles a menos que realmente sepas lo que estás haciendo y estés dispuesto a gastar un montón de tiempo sintonizando para tu caso específico. Lo más importante que puede hacer es asegurarse de que las cosas lentas (como el procesamiento de XML y las E / S de flash síncronas causadas por save: :) no se encuentren en la interacción del usuario que bloquea el hilo principal.


¿Nadie ha mencionado RestKit todavía? Mis amigos ... en serio, tienen que verificar esto. Si está haciendo algo con REST en iOS (y ahora en OS X) y especialmente si quiere trabajar con Core Data ... Mire por favor RestKit. He ahorrado incontables horas implementando una sincronización de datos bastante compleja entre un servidor y mis modelos de Core Data en iOS. RestKit lo hizo tan condenadamente fácil, que casi te pone enfermo.