2010-02-26 15 views
0

Je suis en train de pousser une nouvelle vue sur mon contrôleur de navigation à l'aide:pushViewController crahses

-(IBAction)switchPage:(id)sender 
{ 
MyTableViewController *myTableView = [[CMyTableViewController alloc] initWithNibName:@"MyTableView" bundle:[NSBundle mainBundle]]; 
[myTableView release]; 
[self.navigationController pushViewController:myTableView animated:YES]; 
} 

Je suis en cours d'exécution dans l'erreur suivante:

2010-02-25 21:19:57.717 CoC[3399:20b] *** -[UIViewController switchPage:]: unrecognized selector sent to instance 0xf1a660 
2010-02-25 21:19:57.718 CoC[3399:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController switchPage:]: unrecognized selector sent to instance 0xf1a660' 
+0

Les réponses à ce jour précisent correctement que la libération devrait être faite après avoir poussé la vue, mais n'a rien à voir avec le message d'erreur. Comment configurez-vous l'appel à switchPage? Le problème est là. – willcodejavaforfood

Répondre

1

vous libérez un objet que vous venez d'attribuer ce qui n'a aucun sens.

MyTableViewController *myTableView = [[CMyTableViewController alloc] initWithNibName:@"MyTableView" bundle:[NSBundle mainBundle]]; 
    [myTableView release]; 

libération myTableView après que vous poussez sur la pile

+0

J'ai supprimé la [myTableView release] et la même erreur se produit. – yesimarobot

+0

Quelqu'un peut-il suggérer un bon didacticiel programmatique/non-IB UINavigationController? – yesimarobot

+0

Pouvez-vous essayer d'ajouter des points d'arrêt et voir si votre navigationController n'est pas nul? Utilisez-vous une sous-classe de UITableViewController pour MyTableViewController? –

2

libération d'appel après avoir poussé. Etes-vous sûr de ne pas avoir besoin d'échanger les deux dernières lignes?

+0

Par souci de brièveté, vous pouvez également modifier bundle: [NSBundle mainBundle] à bundle: nil puisque la valeur par défaut est zéro pour utiliser le bundle principal. –

+0

Je ne suis pas très familier avec switchPage (qui est l'erreur signalée dans vos journaux), appelez-vous cette méthode quelque part et oublié de déclarer cela dans votre ViewController peut-être? –

0

Etes-vous sûr de ne pas avoir besoin d'échanger les deux dernières lignes? Tout d'abord, appuyez sur le contrôleur, puis relâchez-le pas visa versa ... :)

+0

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. – Linger

+0

Bon travail attraper quelque chose qui a été posté il y a 2,5 ans :) – sha

0

Comme mentionné précédemment, vous relâchez le contrôleur de vue avant de le pousser. Lorsque vous le poussez sur le contrôleur de navigation, le nombre de rétention augmente, puis vous pouvez le relâcher.

-(IBAction)switchPage:(id)sender 
{ 
    MyTableViewController *myTableView = [[MyTableViewController alloc] initWithNibName:@"MyTableView" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:myTableView animated:YES]; 
    [myTableView release]; 
} 
1

2010-02-25 21: 19: 57,717 CoC [3399: 20b] * ** - [UIViewController switchPage:]: sélecteur non reconnu envoyé à l'instance 0xf1a660

Votre accident pas à cause de le code que vous avez mentionné. Mais il y a un bug dans votre code comme release et thenpush. Changez-le comme:

-(IBAction)switchPage:(id)sender 
{ 
MyTableViewController *myTableView = [[CMyTableViewController alloc] initWithNibName:@"MyTableView" bundle:[NSBundle mainBundle]]; 
[self.navigationController pushViewController:myTableView animated:YES]; 
[myTableView release]; 
} 

Je suppose que l'objet qui appelle "switchPage:" méthode a un problème. Vérifiez ou montrer l'invocation de cette méthode pour toute aide

Cordialement, Manjunath

1

Au-dessus est bien, lorsque le contrôleur de sous-vue a été poussé dans la pile du nav, devrait être augmenté le nombre de conserver, alors vous devriez relâchez-le après l'opération de poussée.