Importar, mostrar y almacenar en caching de grandes datos

Estoy intentando get datos de algún lugar y savelos en un NSMutableArray de objects personalizados que contienen esos datos e información.

Cada vez que el usuario abre la aplicación, los mismos datos se cargan desde el origen y se convierten en mi preciosa matriz con objects personalizados. Esto lleva mucho time (~ 10-20 s) y hace que la aplicación sea una tonta. Entonces, intenté get los datos y mostrarlos como en este enlace.

Lo que probé:

  • guarde la matriz con objects personalizados en un file y cargue este file en el próximo inicio de la aplicación (si se encuentra) sin la necesidad de crear el object personalizado desde cero de nuevo.
  • La encoding y deencoding de objects personalizados demora mucho time en las testings. Incluso si lo guarda en NSUserDefault .

Antes de que alguien comience a contestar esta pregunta, por favor. Eche un vistazo al código de ejemplo y ejecútelo para asegurarse de lo que quiero decir al recuperar los datos y mostrarlos. en time rápido después de relanzar la muestra y hacer lo que quiero más claro 🙂

Si alguien puede hacer que esta muestra sea más clara para mí, estaré agradecido.

En mi opinión, solo tiene dos opciones razonables: 1) lo obvio es usar una tienda de bases de datos y Core Data para administrar sus objects. 2) si no desea utilizar Core Data, puede almacenar cada uno de sus objects personalizados por separado para que pueda cargarlos por lotes.

Si quieres ir a la segunda opción, puedes:

1) Implementar el protocolo NSCoding en su object personalizado. (es solo un poco de código repetitivo, muy sencillo) 2) Después de haber cargado los datos, puede savelos asíncronos en el disco (de esta forma no bloqueará la interfaz de usuario). 3) Cuando se inicia la aplicación, puede cargar un lote de sus objects (por ejemplo, 20, teniendo en count que solo mostrará ~ 10 en un punto determinado). Luego, cuando el usuario se desplaza por su contenido, puede cargar de forma asíncrona más de la misma en los mismos fragments para que estén listos para mostrarse cuando sea necesario.

Esto debería mejorar en gran medida el performance de su aplicación. Si utiliza Core Data, en su lugar, puede hacer que use un comportamiento similar estableciendo la propiedad – [NSFetchRequest fetchBatchSize]. Esto se encargará de search datos en lotes automáticamente.

Le recomiendo una solución muy simple que he utilizado muchas veces y es muy eficiente también.

  1. Descargue videos en el sistema de files si la descarga tiene éxito y luego escriba el file
  2. ruta de acceso a SQLite la próxima vez verifique si el file con el mismo nombre o el mismo ID
  3. existe también en el file SQLite. Si sí, entonces reproduce el video de SQLite.
  4. de lo contrario, vaya al paso uno.

Para esta solución, debe crear una nueva class de administrador que se asegurará de dónde debe search datos.

Todo por 🙂

Encontré este sencillo tutorial que explica algunas partes del código de ejemplo "fetchedResultsController".

y lo diferente está en el file .pch donde hay condición de ZAssert para get datos cuando se inicia la aplicación y cuando se agrega por primera vez.