2010-09-23 3 views
2

J'ai un contrôleur de vue modale qui appelle un autre contrôleur de vue modale dans viewDidLoad basé sur une condition if.L'application se bloque sur l'iPhone en essayant d'ouvrir une vue modale particulière sur chaque cycle de construction alternatif

Le problème étrange que je suis confronté est, la première fois que je compile l'application et ouvre le 1er contrôleur de vue modale, cela fonctionne très bien et il continue à montrer le contrôleur 2ème vue. Maintenant, si j'arrête l'exécution de l'application et reconstruis & exécuter l'application, l'application se bloque (se fige avec seulement le bouton home fonctionne) quand j'ouvre la 1ère vue modale.

C'est l'erreur que je reçois:

Detected an attempt to call a symbol in system libraries that is not present on the iPhone: 
_Unwind_Resume called from function -[NSArray makeObjectsPerformSelector:] in image CoreFoundation. 
2010-09-23 20:19:56.526 MySuperDuperApp[6117:207] CoreAnimation: ignoring exception: [<TwitterLogin 0x7484dc0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key actionButton. 

TwitterLogin est le nom du contrôleur 2 vue modale qui ne parvient pas à afficher.

J'ai essayé de mettre NSLogs pour vérifier où il plante.

//... part of the method which is called in 
    // viewDidAppear of first modal view controller. 
    - (void)login { 
    NSLog(@"Begin TwitterBasicVC login");  
    loginPopup = [[TwitterLogin alloc] init]; 
    loginPopup.oAuth = oAuth; 
    loginPopup.viewDelegate = self; 
    loginPopup.interfaceDelegate = self; 

    // Show Login screen. 
    loginPopup.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    NSLog(@"presenting loginPopup modalView"); 
    [self presentModalViewController:loginPopup animated:YES]; 
    [loginPopup release]; 
    NSLog(@"End TwitterBasicVC login"); 

    //... viewDidLoad of second modal view controller. 
    - (void)viewDidLoad { 
    NSLog(@"Begin TwitterLogin viewDidLoad"); 
     [super viewDidLoad]; 
    queue = [[NSOperationQueue alloc] init]; 
    ... 

La 'présentation loginPopup modalView' un message est imprimé, mais le 'Begin TwitterLogin viewDidLoad' un message n'est pas imprimé. Je ne sais pas pourquoi il se bloque entre la présentation de vue modale et viewDidLoad. Le plus étrange est que cela se produit à chaque fois que je crée/exécute l'application. (J'ai essayé de supprimer l'application et de la construire mais elle se produit toujours)

EDIT: J'ai ajouté les premières lignes de la méthode de connexion où twitterLogin est alloc-inited. J'ai aussi essayé d'appeler la méthode avec performSelector: withObject: afterDelay avec les valeurs 0.0 et 1.0 et le problème existe toujours.

EDIT 2: J'ai fait une construction propre chaque fois que j'ai essayé d'installer l'application sur l'iPhone/Simulator (après avoir supprimé l'application de l'appareil/simulateur). L'application semble fonctionner correctement avec cette méthode. Puis-je supposer qu'il est sûr de télécharger l'application sur l'App Store?

Toutes les suggestions sur la façon dont je procéder dans le débogage me aidera grandement :)

Merci

+0

La méthode viewDidLoad doit être appelée avant la présentation du modal (c'est-à-dire lorsqu'elle est alloc'd et init'd). Pouvez-vous nous montrer où et comment vous créez votre loginPopup? – MishieMoo

+0

Non, la méthode viewDidLoad est appelée après le chargement de la vue. La vue est d'abord chargée lorsque la propriété 'view' de UIViewController est accédée - c'est généralement quand le contrôleur de vue est poussé ou présenté de façon modale comme dans ce cas. – Michal

Répondre

0

Je pense qu'il est recommandé de ne pas afficher deux contrôleurs modalement au sein de la même itération de la boucle. Essayez de présenter le deuxième contrôleur après un petit délai (utilisez des blocs si sur iOS4 + ou créez une méthode et appelez-le via performSelector:withObject:afterDelay:0.1f).

De toute façon, je ne peux pas expliquer l'étrangeté de ce qui se passe toutes les deux fois. Avez-vous accidentellement retourner un paramètre lors de chaque exécution (par exemple isLoggedIn = !isLoggedIn; et persistant dans NSUserDefaults).

+0

Merci pour le commentaire Michal ... Je suis désolé j'ai oublié de mentionner cela. J'ai essayé avec performSelector: withObject: afterDelay et le problème persiste .. j'ai essayé avec 0.0 et 1.0 secondes .. – srik

+0

Je n'économise aucune donnée .. bien que je vérifie si d'autres classes de tiers que j'emploie sont faire quelque chose..même je me demande si l'utilisation de la vue modale dans une vue modale est après tout une bonne idée :( – srik

Questions connexes