Lo siento si esta pregunta ya ha sido contestada, pero no puedo encontrar una respuesta.

Estoy creando una aplicación en la que tengo un UITableViewController y cuando el accessorybutton en el lado derecho de una celda se selecciona una nueva instancia de un UIViewController debe ser creado que contiene la interfaz que se encuentra en una .xib-archivo. El nuevo UIViewController continuación, se inserta en la pila y se muestra.
Mi pregunta es ¿cómo puedo crear el nuevo UIViewController a partir de una existente .xib-archivo?

Esto es lo que he probado hasta ahora:
En Xcode: Archivo -> Nuevo Archivo -> Cocoa Touch Clase -> UIViewController subclase.
Casilla de verificación «UITableViewController subclase» desactivada.
Casilla de verificación «Con XIB para la interfaz de usuario» marcada.

Esto crea una .m, un .h y una .xib archivo. He creado una interfaz de usuario en la «vista» en .xib-archivo. Seleccionando «Archivo del propietario» en el interface builder muestra la recién creada UIViewController en «Identidad de Clase».

Código:

En DetailViewController.m (el nuevo UIViewController):

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
     return self;
}

En SubViewController.m (el antiguo UITableViewController):

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
     //Exception thrown at line below
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
}

Olvidó mencionar que el .xib-nombre del archivo es «DetailViewController.xib».

El código se compila bien, pero cuando lo ejecuto en el simulador y pulse una accessorybutton se termina debido a una excepción no capturada.

Lo que me estoy perdiendo?

Gracias de antemano

  • En Xcode, establecer un punto de interrupción para objc_exception_thrown así GDB se detendrá cuando la excepción se produce, así que usted puede ver la pila de seguimiento y algunos artículos sobre la información que va a necesitar.
  • También, en la consola se debe obtener un registro acerca de la excepción no capturada. Añade que a su pregunta, ya que por lo general proporciona una pista importante acerca de lo que salió mal.
  • Ok, soy nuevo en Xcode, así que voy a ver en que. Pero se debe trabajar de esta manera? No estoy lejos? El initWithNibName método y de todo lo que parece ser correcto?
InformationsquelleAutor Isak T. | 2010-01-15

2 Comentarios

  1. 2

    Usted no debería tener que lanzar esta:

    DetailViewController
    *detailViewController = (DetailViewController*)[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    Están recibiendo una advertencia del compilador si no?

    • Estás en lo correcto – pero el error persiste.
  2. 1

    El error fue en el nuevo punto de vista que yo estaba tratando de mostrar. En el .xib-archivo me había insertado una MKMapView y cuando me he quitado este funciona todo perfectamente.

    Gracias de nuevo por ayudarme a depurar!

    • Seguro – usted debe marcar su respuesta aceptada por lo que esto no permanecen abiertos. Buena suerte!
    • y por cierto, si quieres un MKMapView debe utilizar el framework MapKit

Dejar respuesta

Please enter your comment!
Please enter your name here