2011-12-23 5 views
6

Tengo dos TableViewControllers con un intervalo intermedio. Cuando un usuario hace clic en una celda en el primer TVC, se le presenta el segundo TVC. El segue es modal, tiene un identificador llamado "segueToLocationDetails" y pasa un objeto junto con él. Puede pensar en el segundo TVC como una página de "detalles" más o menos.performSegueWithIdentifier desde TableViewController a un segundo TVC incrustado en NavController no funciona

Mi código funciona perfectamente en el escenario que he descrito anteriormente. Sin embargo, se rompe tan pronto como incrusto el segundo TVC en un controlador de navegación.

Ejemplo. Lo tengo funcionando perfectamente. Luego destaco el segundo TVC en IB, paso el mouse sobre Producto | Incrustar | Controlador de navegación Ahora el segundo TVC está en un controlador de Nav. Sin embargo, el segue sigue apuntando al segundo TVC. Quito la segue y la vuelvo a conectar desde la primera celda del TVC al Controlador de navegación y me aseguro de darle a la segue un identificador. ¡Corre de nuevo y se rompe! El error está por debajo ...

2011-12-23 15: 30: 45.469 proyecto12 [5219: 11603] - [UINavigationController setDetailsObject:]: Selector no reconocido enviado a la instancia 0x7b92ce0 2011-12-23 15 : 30: 45.471 proyecto12 [5219: 11603] * terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '- [UINavigationController setDetailsObject:]: selector no reconocido enviado a la instancia 0x7b92ce0' * primer tiro pila de llamadas: (0x16ea052 0x150ad0a 0x16ebced 0x1650f00 0x1650ce2 0x3933 0x703e1e 0x36f6d9 0x36f952 0xbf786d 0x16be966 0x16be407 0x16217c0 0 x1620db4 0x1620ccb 0x14ec879 0x14ec93e 0x2dfa9b 0x2a98 0x29f5 0x1) terminar llamado lanzar una excepciónActual idioma: auto; Actualmente Objective-C

Parte del código es de abajo para ayudar a explicar:

AllLocations.h & AllLocations.m (esta es la tabla maestra)

AllLocations.h 

@interface AllLocations : UITableViewController 
{ 
    SQLiteDB *mySQLiteDB; 
} 
@property (nonatomic, strong) NSMutableArray *locationsArray; 



AllLocations.m 

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

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"segueToLocationDetails"]) 
    { 
     NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow]; 
     NSInteger rowNumber = selectedIndexPath.row; 

     mySQLiteDB = (SQLiteDB *) [locationsArray objectAtIndex:rowNumber]; 

     DetailsTVC *detailsTVC = [segue destinationViewController]; 

     detailsTVC.detailsObject = mySQLiteDB;   
    } 
} 

DetailsTVC.h & DetailsTVC.m (esta es la vista de tabla detallada)

DetailsTVC.h 

@interface DetailsTVC : UITableViewController 

@property (nonatomic, strong) SQLiteDB *detailsObject; 


DetailsTVC.m 

@implementation SpotDetailsTVC 

@synthesize spotDetailsObject; 

Nota: Dejé fuera todos el código que no era realmente importante o relevante para la pregunta.

De nuevo: Esto funciona perfectamente si el segue va desde el Originating TableVeiwController al otro TableViewController. Solo se rompe cuando incrusto el segundo TVC en un controlador de Nav. Necesito saber cómo hacerlo funcionar con el Controlador Nav en la imagen. ¡Gracias por adelantado!

Respuesta

11

DetailsTVC *detailsTVC = [segue destinationViewController];

Esa línea es incorrecta. Como su segundo TVC ahora está integrado en un controlador de navegación, [segue destinationViewController] ahora es un UINavigationController. Esto debería funcionar:

DetailsTVC *detailsTVC = [[segue destinationViewController] visibleViewController];

+1

Ok, gracias, sin embargo yo estoy haciendo ahora esta advertencia: file: // localhost/Usuarios/ME/Escritorio/Project13/AllLocations.m: advertencia: Problema semántico: Tipos de punteros incompatibles que inicializan 'locationDetailsTVC * __ strong' con una expresión de tipo 'UIViewController *' – ElasticThoughts

+0

Pruebe esto en 'prepareForSegue: sender:' para averiguar qué es destionationController: 'NSLog (@"% @ " , NSStringFromClass ([[segue destinationViewController] clase])) ' –

+0

2011-12-23 16: 32: 20.741 Project13 [5452: 11603] UINavigationController – ElasticThoughts

Cuestiones relacionadas