Pregunta

Tengo curiosidad por aquellos de ustedes que están creando aplicaciones para iPhone basadas en REST / SOAP / XML-RPC o simplemente están bajando un feed XML dinámico. ¿Qué significa exactamente para usted cuando un usuario dice "actualizar" el feed? ?

La forma más sencilla es rellenar alguna colección, por ejemplo, un NSMutableArray, con lo que sea que haya bajado del feed. Si hay un widget en la interfaz de usuario disponible para actualizar, normalmente hago algo como:

[myMutableArray removeAllObjects];
// follow steps to repopulate myMutableArray

Parece que este es el algoritmo menos eficiente para actualizar una fuente XML. Por ejemplo, muchas personas que están creando clientes de Twitter, están agregando cambios a su feed existente, en lugar de reducir de nuevo el feed completo en su forma completa.

¿Qué tipo de algoritmos está utilizando para " actualizar " ¿Sus modelos cuando hablan con una fuente de datos del lado del servidor?

Gracias a todos.

¿Fue útil?

Solución

Debería considerar el uso del marco de PubSub si puede requerir OS X 10.5. Está diseñado explícitamente para obtener y actualizar feeds RSS / Atom.

(Descargo de responsabilidad: escribí mucho de ese marco mientras estaba en Apple :)

La respuesta a tu pregunta es que los feeds son inherentemente ineficientes. Puedes minimizar esto por

  1. Usando HTTP "GET condicionales", entonces, si la fuente no ha cambiado en el servidor, solo obtendrás una respuesta 304. Esto ahorra tiempo para el servidor y para usted. (¡Algunos servidores de feeds, como slashdot, te prohibirán si no usas las aplicaciones condicionales!)

  2. Comprueba la " Última modificación: " fecha en la respuesta. Sí, incluso si usas un GET condicional. Algunos servidores no los manejan correctamente. Si la fecha no se modifica, ignora la fuente.

  3. Compare los datos en bruto de la respuesta con la última respuesta en bruto que recibió. Si es idéntico, ignora la alimentación. (Algunos servidores no admiten la obtención condicional o envían fechas de última modificación ...)

  4. Ahora tienes que analizar el XML.

  5. Verifique la fecha de modificación de nivel superior en la fuente (esto varía entre Atom y los diferentes sabores de RSS). Nuevamente, si es la misma que la última vez, ignore la fuente.

  6. Si has llegado hasta aquí, lo más probable es que se haya actualizado el feed. Lo más fácil es deshacerse de todas las entradas antiguas guardadas y reemplazarlas por las nuevas. Pero esto significa que no puede mantener entradas "históricas" que se hayan caído al final de la fuente. Si desea hacer eso, debe revisar cada entrada en la fuente que se acaba de analizar, hacer coincidirla con la entrada correspondiente en su almacenamiento persistente y actualizar la persistente en función de la nueva. Si no pudo encontrar uno persistente, agréguelo como una nueva entrada. (Las entradas coincidentes pueden ser difíciles en las fuentes RSS cojas que no incluyen GUID únicos para cada entrada. Debes intentar comparar los enlaces permanentes y los títulos. Yuck.)

Todo esto realmente es un gran lío. Tomó mucho trabajo hacer que todo se comportara correctamente y trabajar con todos los feeds y servidores rotos por ahí; Aprovecha mi dolor y utiliza PubSub, si puedes :)

Otros consejos

Un enfoque es utilizar el analizador de extracción NSXML integrado en un hilo de fondo y comparar las entradas de la secuencia con lo que tienes en la memoria, actualizando solo lo que ha cambiado.

Acabo de lanzar una fuente abierta RSS / Atom Parser para iPhone y espero que sea de alguna manera utilizar.

¡Me encantaría escuchar tus pensamientos sobre esto también!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top