2012-02-24 15 views
5

Mi aplicación utiliza datos de ubicación y la presenta como una tabla y en un mapa.¿Cómo compartir un UIManagedDocument usando Storyboards con un controlador de barra de pestañas como controlador inicial?

Empieza con un Controlador de barra de pestañas, cada una de sus vistas es un Controlador de navegación (uno para la vista de tabla, uno para el mapa, etc.).

Quiero compartir un UIManagedObject para utilizar el mismo Contexto de Objeto Administrado, de modo que si el usuario se actualiza en la vista de tabla, los datos también se actualizan para el mapa, por lo que no es necesario actualizar dos veces.

Originalmente pensé en subclasificar el Controlador de barra de pestañas y agregar un UIManagedDocument como una propiedad, y simplemente pasarlo a cada controlador en el método de preparación para segue. Pero leí que UITabBarController no está destinado a ser subclasificado.

Otro enfoque podría ser la creación de un controlador de vista, agregando el documento administrado como propiedad y una barra de pestañas en él. Pero creo que mi guión gráfico no sería claro o inconsistente al mostrar algunas relaciones gráficamente y otras solo en código.

¿Cuál es el apropiado? ¿O hay una mejor manera de hacerlo?

Gracias de antemano y saludos cordiales.

Respuesta

3
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"showGuide"]) 
    { 
     UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController]; 
     for (id vc in tabBarController.viewControllers) {  
      [vc setValue:_document forKey:@"document"];    
    } 
} 
+0

habría de hacerlo en la App Delegado? – Armando

+0

No, esto se debe escribir en ViewController, que se encuentra delante de TabBarController. Lo que utilicé aquí se llama patrón de diseño Key Value Coding. Utilizándolo asigné la propiedad "document" de cada controlador de TabBarController a self.document. – Shmidt

+0

Buen tutorial para usar UIManagedDocument: http://www.informit.com/articles/article.aspx?p=1842295&seqNum=10 – Shmidt

2

Me encontré con este problema también y me decidí por una clase de manejador de documento independiente que proporciona acceso al documento cargado a través de un bloque.

[[MYDocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) { 
    // Do stuff with the document, set up a fetched results controller, whatever. 
}]; 

He escrito mi solución y publicado el código aquí: Core Data with a Single Shared UIManagedDocument

Cuestiones relacionadas