2011-02-17 2 views
1

Quelqu'un sait pourquoi, si je pousse/localSearchViewController pop, je reçois une erreur de EXC_BAD_ACCESS après comme 5 push/popPush/Pop View Controller EXC_BAD_ACCESS

if (localSearchViewController == nil) 
    localSearchViewController = [[LocalSearchViewController alloc] init]; 

    CBAAppAppDelegate *app = (CBAAppAppDelegate *) [[UIApplication sharedApplication] delegate]; 

    [app.navBarController.navigationBar setHidden:YES]; 

    [app.navBarController pushViewController: localSearchViewController 
            animated:YES]; 

Répondre

0

Je ne sais pas si cela est la cause si votre accident, mais à moins que vous avez remplacé la méthode d'initialisation du contrôleur de votre vue, vous devez utiliser sa place initialiseur désigné:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

Et Si vous avez défini cette méthode dans votre fichier d'implémentation, assurez-vous que vous appelez également super-dessus. Si cela ne résout pas votre problème, pouvez-vous essayer de trouver exactement où votre code plante en définissant des points d'arrêt via cette méthode ET dans localSearchViewController. C'est probablement un problème de sur-version quelque part dans votre code.

[modifier ajouter]

Voici ce que votre code pour initialiser le contrôleur de vue devrait ressembler à:

localSearchViewController = [[LocalSearchViewController alloc] initWithNibName:@"YourNibName" bundle:nil];

+0

Tant qu'il possède une plume nommée LocalSearchView.xib ou (je pense) LocalSearchViewController.xib, alors init devrait fonctionner correctement. –

+0

D'après les docs d'Apple: "L'initialiseur désigné est la méthode dans chaque classe qui garantit l'initialisation des variables d'instance héritées (en envoyant un message à super pour exécuter une méthode héritée.) C'est aussi la méthode qui fait le plus de travail. que d'autres méthodes d'initialisation dans la même classe appellent ". Il est donc bien d'appeler init tant qu'il contient un appel à [super] sur l'initialiseur désigné à l'intérieur. Cela garantit que la classe est initialisée comme elle devait l'être, car nous ne savons pas si la superclasse effectue un autre travail lorsque cette méthode est appelée. – Rog

+0

J'ai résolu ce problème, en appelant super classe, [super viewDidLayoutSubviews]; –

-1

Enfermez que les accolades.

if (localSearchViewController == nil) { 
    localSearchViewController = [[LocalSearchViewController alloc] init]; 

    CBAAppAppDelegate *app = (CBAAppAppDelegate *) [[UIApplication sharedApplication] delegate]; 

    [app.navBarController.navigationBar setHidden:YES]; 

    [app.navBarController pushViewController: localSearchViewController 
           animated:YES]; 
} 
+0

Mais la poussée ne se produira pas la deuxième fois que j'essaie de pousser –

+0

c'est peu probable de résoudre le problème. La vérification de zéro est correcte comme dans le cas où l'intention est de créer une nouvelle instance de 'localSearchViewController', ce qui est logique dans le contexte de son code. – Rog