2012-01-19 9 views
16

Parece que no obtengo este SIGABRT que sigo recibiendo. Tengo esta aplicación de storyboard para iOS, y en el guión gráfico tengo un UITableViewController. Ahora, puedo tomar una celda del TVC y hacer que presione el controlador de vista "segue", pero ¿qué sucede si necesito detener la acción de "segue" en ciertas condiciones? Aparentemente no se puede, ya que el método prepareForSegue: sender: no lo permite, y parece ser la única devolución de llamada que se llama cuando se está por realizar una transición.performSegueWithIdentifier vs instantiateViewControllerWithIdentifier

Así que supuse que podría entrar en la tablaView: didSelectRowAtIndexPath: y realizar el cambio programáticamente. Suboptimal, pero aún ...

Bueno, resulta que adiviné mal. O al menos, estoy haciendo algo mal. La manera más obvia de hacerlo sería

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"TheOtherIdentifier" sender:self]; 
} 

pero toda la aplicación se bloquea con un SIGABRT, que no da ninguna información útil (y sí, estoy seguro de que es esa línea que hace que el accidente aplicación, lo comprobado con el depurador :) Por otra parte, la VC estoy intentando cargar tiene el identificador configurado correctamente, ya que el siguiente código

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TheOtherIdentifier"]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

"funciona". Las comillas indican que claramente esta no es la forma en que debe realizarse dicha transición.

Ahora: ideas?

+0

Para ser claros, dijiste que estableces este identificador para el controlador de vista de destino. ¿Pero estableciste un identificador para el segue en sí? Ese es el identificador que necesita usar en el primer caso. –

+0

Ok, me estaba perdiendo eso. Consulte la respuesta de T.J. para más comentarios. – Morpheu5

Respuesta

8

Prueba esto:

  1. utilizar el primer bloque de código y no la segunda.
  2. En el control del guión gráfico arrastre desde la celda al otro controlador de vista. Tenga en cuenta que se crea un segue.
  3. Haga clic en el segue. Utilice el inspector de atributos para dar el segue y el identificador "theOtherIdentifier" (se recomienda la "t" minúscula). También seleccione un estilo segue de "push" suponiendo que está utilizando un controlador de navegación.
  4. Storyboard creará una instancia del otro controlador de vista. Asegúrate de no estar haciendo esto en tu código.
+0

Gracias, eso aclara el problema, excepto que si configuro el segue vía IB, se realiza sin importar qué. Tendría que incluir una condición, por ejemplo, necesito verificar la identidad del usuario en función de los valores ingresados ​​en otras celdas. – Morpheu5

+0

Ok, lo siento, me faltaba la parte del control del guión gráfico :) EDITAR: Woops. Lo siento de nuevo. Bajé el zoom para crear el paso de una VC a la otra, pero me di cuenta de que podía hacerlo arrastrando la barra superior del sistema. No se preocupe, de todos modos: lo logré :) – Morpheu5

+0

Genial. Me alegro de que todo haya funcionado. Crear un segue desde el selecto en el controlador de vista desde en la barra del sistema es nuevo para mí. Solía ​​crear botones ocultos para segue condicional. –

Cuestiones relacionadas