múltiple ir a buscar los controladores (y posiblemente múltiples entidades) es un enfoque equivocado . La solución correcta es usar el parámetro sectionNameKeyPath
en el NSFetchedResultController
para agrupar los resultados en varias secciones. Si piensa en sus entidades de forma diferente, tal vez sean en realidad la misma entidad y, en su lugar, puede usar un itemType de propiedad que luego puede seccionar (y también debe ordenarlo). P.ej. supongamos que tengo entidades de lúpulo y grano, entonces podría cambiarlas por Ingredient y tener un int_16 property ingredientType, que luego tengo una enumeración en el código para almacenar los valores hopType = 0
, grainType = 1
. Después de todo, el ingrediente es solo un nombre y un peso, que ambos comparten.
Sin embargo, si sus entidades realmente tienen un conjunto distinto de propiedades, la solución correcta es crear una entidad abstracta padre que tenga una propiedad que pueda usar para la sección, p. sortOrder, sectionID o tipo. Cuando luego creas un controlador de búsqueda y recuperas la entidad principal abstracta, obtienes resultados que contienen todas las subentidades. Por ejemplo, en la aplicación de Notes tienen una entidad abstracta NoteContainer que tiene subentidades Cuenta y Carpeta.De esta forma, pueden usar un solo controlador de búsqueda para mostrar la cuenta en la primera celda de la sección y luego tener todas las carpetas en las siguientes celdas. P.ej. Todas las Notas de iCloud (en realidad es la cuenta), luego Notas (es la carpeta predeterminada), seguidas por todas las carpetas personalizadas, luego la carpeta de la papelera. Usan una propiedad sortOrder y la carpeta predeterminada es 1, las carpetas personalizadas son todas 2 y la papelera es 3. Luego, al agregar esto como un descriptor de clasificación, pueden hacer que las celdas se muestren en el orden que desean. Es un poco diferente de su requerimiento porque tienen las 2 entidades mezcladas en diferentes secciones, pero aún puede usarlas solo con diferentes propiedades de clasificación.
La moraleja de la historia es no luchar contra el marco, lo abraza :-)
Gracias por la respuesta detallada. Esa parte parece bastante sencilla, sin embargo hay otros dos métodos de los que no estoy tan seguro (lo que hacen y si necesitan algún cambio): http://pastebin.ca/1805761 – indragie
Depende de lo que la aplicación lo hace; es difícil para mí responder sin saber mucho más sobre la aplicación, el diseño, etc. Sin embargo, es probable que tenga una opción segura al hacer que esos métodos envíen a la tabla vista un mensaje de reloadData. – Giao
Gestionado para hacer que esto funcione con un pequeño retoque :-) Gracias – indragie