2010-06-30 7 views
22

Estoy trabajando en una aplicación para iPhone, y en una vista particular necesito cargar dos entidades diferentes: una que llene un UITableView, y otra que llene un UITextView.Datos básicos: ¿NSFetchedResultsController puede recuperar dos entidades diferentes?

¿Es posible obtener ambas propiedades con un solo NSFetchedResultsController?

¿O tengo que utilizar dos NSFetchedResultsController s diferentes?

¿Alguna idea sobre cómo abordar mejor este problema?

+0

¿Puede ser un poco más específico sobre cómo se configura su modelo? ¿Hay una relación entre las dos entidades? Si es así, puede atravesar la relación para obtener los valores que necesita sin hacer dos recuperaciones. – Alex

+0

Hola Alex, las dos entidades no están relacionadas. Está configurado de esta manera: * La entidad "Artículo_comentario" representa los comentarios que quiero mostrar en un UITableView. El usuario puede tocar cualquier cantidad de esos comentarios para almacenarlos. * La entidad "Inspection_data" representa un registro del texto de comentarios del artículo (no la entidad, sino el texto de esa entidad solamente). El texto de ese registro que quiero mostrar en una UITextView. – futureshocked

+2

La única forma de obtener múltiples tipos de entidad devueltos en una sola solicitud de recuperación es si ambos heredan de una entidad principal común y usted establece la entidad de recuperación en la matriz. –

Respuesta

15

Cada solicitud de búsqueda tiene solo una entidad y cada controlador de resultados obtenido solo tiene una búsqueda. Por lo tanto, necesita controladores separados para cada entidad.

Si lo piensas bien, ¿cómo harías un predicado para buscar dos entidades lógicamente separadas?

Probablemente no necesite dos recuperaciones en absoluto. En la mayoría de los casos, puede buscar las entidades que pueblan la tabla y luego usar una relación para que la entidad de la fila seleccionada rellene algo así como una vista de texto.

+2

Gracias. Agregué un segundo controlador de búsqueda, me aseguré de que no tuviera un delegado y funcionó exactamente como estaba previsto. Como no es necesario que realice ninguna acción una vez que el segundo controlador de búsqueda ha devuelto los resultados, no es necesario que escuche los cambios. – futureshocked

+3

No habría ningún problema si necesitas escuchar los cambios. Simplemente haz una comparación para cada método de delegado. if (controller == self.entity1FetchedResultsController) {...} else {...} –

+0

Tengo una situación en la que tengo dos entidades que subclase una súper entidad. En este caso, la búsqueda debería poder tomarlos todos en un controlador. Luego debe ordenar algún atributo común y verificar el tipo de clase para determinar la representación de la celda. –

8

Como dijo TechZen, la respuesta es no.

Sin embargo, puede controlar los guardados del NSManagedObjectContext usted mismo y reaccionar ante esos rescates. Si realmente necesita ver más de una entidad (algo que es mucho más común en el iPad que en el iPhone), agregue un observador NSNotification en el NSManagedObjectContextDidSaveNotification y mire el -userInfo del NSNotification que aparece. Luego puede ejecutar predicados en contra de los resultados para determinar si necesita actualizar su pantalla. Eso es lo que el NSFetchedResultsController está haciendo bajo las sábanas.

2
The quick answer is NO. But I found a creative answer. 

En su tableViewController, haga una barra de búsqueda con la cantidad de ámbitos que tenga.

Cuando se selecciona un alcance diferente, puede buscar entidades diferentes.

¡Esto funciona porque hice una aplicación como esta!

¡Los usuarios también tendrían más facilidad para separar los dos datos diferentes!

1

La mejor solución sería refactorizar su modelo y ver si sus 2 entidades tienen algo en común. Puedes hacer una entidad abstracta para las cosas que se cruzan, y luego heredar tus 2 entidades. Realice la búsqueda en la entidad abstracta, y su controlador de resultados de búsqueda debería arrojar resultados mixtos.

+0

es una buena idea, pero desafortunadamente Apple nos decepcionó implementando subentidades todo en una tabla gigante. – malhal

Cuestiones relacionadas