2010-07-19 4 views
0

J'ai utilisé pour afficher un écran d'accueil qui en arrière-plan charge des données du web, je vérifie également que si l'emplacement de l'utilisateur est changé d'une ville à une autre ville je veux montrer en alerte à la utilisateur avec le message que vous êtes maintenant dans "CityName" voulez-vous voir les données de cette ville?Afficher UIAlertView sur l'écran de démarrage

J'ai une application à onglets et j'ai présenté l'écran de démarrage comme suit dans la classe de délégué de l'application.

SplashViewController *controller = [[SplashViewController alloc] initWithNibName:nil bundle:nil]; 
tabBarController.view.frame = [[UIScreen mainScreen] bounds]; 
controller.tabBarController = self.tabBarController; 
[application setStatusBarStyle:UIStatusBarStyleBlackOpaque]; 
[window addSubview:controller.view ]; 
//[window addSubview:tabBarController.view ]; 

[self.tabBarController presentModalViewController:controller animated:YES]; 
[window makeKeyAndVisible]; 
[controller release]; 

Maintenant, quand je montre l'écran d'alerte planter l'application avec le message « EXC_BAD_ACCESS » et le spectacle de trace de pile qui _buttonClick est libéré en classe UIAlertView.

S'il vous plaît aviser ce que je devrais faire, j'ai également essayé avec UIActionSheet mais le même problème avec cette chose aussi.

Je pense qu'il y a un problème avec le modèle avec la vue actuelle (SplashView).

Merci d'avance.

+0

Est-ce que ma stratégie est mauvaise? Je ne devrais pas identifier l'emplacement de l'utilisateur et récupérer des données du Web sur l'écran de démarrage? –

Répondre

0

je résoudre ce problème, le problème était que mon Splash View était une vue modelée et invoqué par

[self.tabBarController presentModalViewController: contrôleur animé: OUI];

ce que je faisais que je bougeais les téléchargement de données à un autre contrôleur de vue et là, je peux afficher les alertes, et peut gérer que

0

Etes-vous en train d'essayer d'afficher votre UIAlertView dans votre SplashViewController viewDidAppear? Sinon, j'essaierais ça en premier. Je m'assurerais également que votre méthode UIAlertView clickedButtonAtIndex est configurée correctement pour essayer de piéger ce qui se passe.

UIAlertView *alert = [[UIAlertView alloc] 
    initWithTitle:@"Your Location Has Changed" 
    message:@"Your location has changed since you last opened opened THEAPP. Would you like to refresh your data?" delegate:self 
    cancelButtonTitle:@"Cancel" 
    otherButtonTitles:@"OK", nil]; 
alert.tag = 1; 
[alert show]; 
[alert autorelease]; 

Ensuite, pour la méthode clickedButtonAtIndex:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    //--NSLog(@"You clicked button #%i",buttonIndex); 

    if (alertView.tag == 1){ 

     if (buttonIndex == 0) { 
      //--NSLog(@"CANCEL"); 

     } else if (buttonIndex == 1) { 
      //--NSLog(@"OK"); 

     } 
    } 
} 

Faire tout cela sur un écran d'accueil devrait être bien aussi longtemps que vous prenez en compte les exigences du HIG pour l'utilisation de l'emplacement des utilisateurs. J'espère que cela t'aides!

+0

Je reçois toujours l'erreur !! la seule différence que je faisais était de libérer l'alerte et vous le faites comme autorelease .... Pour reproduire je pense que vous devez ouvrir une vue par presentModalViewController et puis montrer l'alerte dans cette vue ouverte le même problème se produira –