2011-10-19 4 views
3

Mon problème semble être un peu bizarre, j'ai une coutume UITarBar qui gère plusieurs UINavigationController s avec un UIViewController qui présente ces NavController s modalement sur un bouton UITabBartouchUpInside, donc dans iOS 5 mon application se bloque à cause de la méthode dismissModalViewControllerAnimated: ... Et si changer la méthode de rejet à la nouvelle sur iOS 5 (dismissViewControllerAnimated:completion:) il ne rejette pas le NavController. Voici un code sur la façon dont je change les contrôleurs:rejetant UINavigationController dans iOS 5

- (void) changeController 
{ 
    if ([self.generalViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { 
     [self.generalViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
    } else { 
     [self.generalViewController dismissModalViewControllerAnimated:NO]; 
    } 
    [self.anotherNavController.view addSubview:customTabBar]; 
if ([self.generalViewController respondsToSelector:@selector(presentViewController:animated:completion:)]) { 
     [self.generalViewController presentViewController:anotherNavController animated:NO completion:nil]; 
    } else { 
     [self.generalViewController presentModalViewController:anotherNavController animated:NO]; 
    } 

Tout est géré dans le AppDelegate. Merci pour les conseils.

EDIT: J'ai trouvé quelque chose sur ce poste dismissModalViewControllerAnimated: (and dismissViewControllerAnimated) crashing in iOS 5 et fait ce qu'il a fait (présenté le premier viewControllerAnimated animé) et puis tout comme avant l'iOS 5 vérifie les nouveaux sélecteurs de presentViewController et tout fonctionne bien sur le simulateur mais pas sur l'appareil ..

+0

Votre premier test de condition si le generalViewController répond au sélecteur. Si elle est évaluée à true alors ce message est envoyé à presentingViewController ??? – Geoffroy

+0

Ouais parce que j'ai lu c'est la façon de faire ainsi dans iOS 5 –

+1

La vérification est nécessaire si vous voulez que la même application fonctionne sur iOS 4.x et plus tôt; Si vous ne ciblez que iOS 5, il n'est pas nécessaire de vérifier. – benzado

Répondre

0

Je ne suis pas sûr de vos premières lignes, et pense que les premières lignes devraient peut-être:

if ([self.generalViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { 
    [self.generalViewController dismissViewControllerAnimated:YES completion:nil]; 

Vous avez un .presentingViewController étrangers dans la deuxième ligne du actuellement ci-dessus. Je vois dans votre commentaire ci-dessus que vous avez une justification, mais avez-vous essayé l'alternative?

Peu importe, j'avais un problème lié au passage à iOS 5, et a constaté que la solution était simplement d'envoyer les commandes démettre ainsi:

[self dismissViewControllerAnimated:YES]; 

Je vous suggère de l'essayer. Il a travaillé pour moi, et aussi toujours travaillé dans iOS 4.2 et quand je courais le code là ...

Edit: correction, il a été dismissModalViewControllerAnimated que je corrigeais. Cependant, dans ce cas, j'ai trouvé que juste envoyer le message à soi plutôt que de cibler un contrôleur de vue était ce qui a résolu le problème de ne pas être en mesure de rejeter la vue, et travaillé à la fois iOS 4 et 5 ... essaie juste.

+0

Le problème réel était quelque chose d'autre et pas la façon de rejeter le contrôleur, genre difficile à expliquer, car il n'était même pas lié à ma question initiale, mais merci pour votre opinion. –