2012-01-17 2 views
2

Les états de protocole UIAlertViewDelegate les suivants:méthode déléguée de UIAlertView alertViewCancel: ne pas appelée

// Called when we cancel a view (eg. the user clicks the Home button). This is not called when the user clicks the cancel button. 
// If not defined in the delegate, we simulate a click in the cancel button 
- (void)alertViewCancel:(UIAlertView *)alertView; 

Cependant, j'ai un UIAlertView qui est affiché et quand je maintenant cliquez sur le bouton Accueil dans le simulateur, la méthode alertViewCancel: ne s'appelle pas. S'il vous plaît noter que la méthode de délégué alertView:clickedButtonAtIndex: est appelée lorsque je touche un bouton sur le AlertView afin que le délégué est connecté correctement.

Est-ce un bug sur le côté des pommes ou est-ce moi, ou peut-être le simulateur?

Edit:

Je travaille actuellement autour de cette question en écoutant la notification UIApplicationWillResignActiveNotification où je fais ce qui suit de rejeter le AlertView:

[self.currentAlert dismissWithClickedButtonIndex:-1 animated:NO]; 
[self.currentAlert release]; 
self.currentAlert = nil; 
+0

Faites-vous quelque chose dans clickButtonAtIndex qui remplacerait tous les appels à alertViewCancel? – carbonbasednerd

+0

Pouvez-vous afficher le code qui crée une vue d'alerte? – rishi

+0

@carbonbasednerd Bonne question, mais la méthode 'alertView: clickedButtonAtIndex:' n'est pas appelée quand j'appuie sur le bouton HOME. J'ai travaillé autour de ce problème en écoutant la notification 'UIApplicationWillResignActiveNotification' (j'ai mis à jour mon message avec ce peu d'information) – Besi

Répondre

3

Il est appelé lorsque le système fait oblitérations votre alerte. Votre vue d'alerte n'est plus annulée lorsque votre application passe en arrière-plan, sauf si votre application est expulsée par le processus Flotsam. Lorsque vous vous retrouvez au premier plan, votre vue d'alerte s'affiche à nouveau. Je présume, bien que je ne sache pas avec certitude, que si les épaves tues votre processus, vous aurez cet appel de délégué dans le cadre de la séquence de démontage.

La documentation est probablement un peu trompeuse sur ce point. Auparavant, les boutons d'accueil annulaient les alertes, mais ce n'est plus toujours le cas.

+0

D'accord, je pense que je comprends. Cela signifie que sur un "périphérique pré-multitâche", la méthode serait probablement appelée, puisque le "UIAlertView" serait vraiment annulé, et ne serait donc pas affiché à nouveau. Mais qui est cette "épave"? :-) – Besi

+1

'flotsam' est le processus système qui mange les applications lorsque le système a besoin de plus de mémoire. Lorsque la pression de la mémoire sur le périphérique est élevée, Flotsam sélectionne une application en arrière-plan et envoie un avertissement de mémoire. Si l'application ne libère pas assez de mémoire, 'flotsam' le supprime. C'est un esprit similaire à 'chien de garde ', le processus du système qui tue les applications qui ne répondent pas. Le nom est un calembour sur "flotsam et jetsam", termes pour les choses qui flottent autour qui ne sont pas utilisés. –

+0

+1: Merci pour la perspicacité! – Besi

Questions connexes