ios objective-c ios7 uistoryboardsegue

ios - la propiedad del controlador de destino prepareForSegue no está configurada



objective-c ios7 (1)

Aquí está mi preparado para la próxima:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEqual:@"cameraToRollsSegue"]){ ALRollsTableViewController *rollsTableViewController = (ALRollsTableViewController *)[segue destinationViewController]; Camera *c = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]]; NSLog(@"CAMERA FROM INSIDE PREPARE FOR SEQUE: %@", c); rollsTableViewController.selectedCamera = c; }

}

Verifico que la cámara no es nula con NSLog:

CAMERA FROM INSIDE PREPARE FOR SEQUE: <Camera: 0x8dc1400> (entity: Camera; id: 0x8dafba0 <x-coredata://A415F856-5F21-4F08-9CAB-4B2A023B55C3/Camera/p1> ;

ALRollsTableViewController viewDidLoad:

- (void)viewDidLoad { NSLog (@"ROLLS TABLE VIEW CONTROLLER : viewDidLoad!"); NSLog(@"(selected camera = %@", self.selectedCamera); }

resultados en:

ROLLS TABLE VIEW CONTROLLER : viewDidLoad! (selected camera = (null)

¿Qué podría estar haciendo mal aquí que la propiedad no está siendo establecida?

ACTUALIZAR

Con la ayuda de Matt, he determinado que la instancia de mi controlador de vista de destino en mi prepareForSeque no coincide con el controlador de vista de destino real:

rollsTableViewController FROM SEGUE: <ALRollViewController: 0x8d90bf0> rollsTableViewController FROM viewDidLoad in rollsTableViewController: <ALRollsTableViewController: 0x8c5ab00>

No sé por qué es este el caso o qué hacer para solucionarlo.


Resumen post-chat:

Bueno, ¡fue complicado! Pero básicamente estabas diciendo esto:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEqual:@"cameraToRollsSegue"]){ ALRollsTableViewController *rollsTableViewController = (ALRollsTableViewController *)[segue destinationViewController]; // ... }

El problema era que [segue destinationViewController] no era un ALRollsTableViewController. Por lo tanto, no hablabas de la instancia con la que pensabas que hablabas, y no hablabas a una instancia de la clase con la que pensabas que hablabas.

Lo sorprendente es que tu código no se bloqueó cuando se ejecutó. Estabas diciendo esto:

rollsTableViewController.selectedCamera = c;

Pero rollsTableViewController no era de hecho un ALRollsTableViewController. Le mintió al compilador cuando lanzó incorrectamente. Sin embargo, no chocó cuando se ejecutó esa línea. Por qué no? ¡Es porque tienes muchas clases con @property selectedCamera ! Entonces estabas estableciendo la propiedad de una clase diferente . Pero una propiedad con el mismo nombre existía en esa clase, por lo que no se bloqueó. Por lo tanto, no descubrió que esta era la clase incorrecta y la instancia incorrecta.