2010-08-30 6 views
0

J'essaye de créer un splashcreen de 1-2 secondes pour mon application en utilisant un contrôleur de vue modal cependant quand j'essaye de fermer la vue mon application se bloque avec une erreur d'accès défectueuse. Donc, à mon délégué demande j'ai:Écran de démarrage: EXC_BAD_ACCESS après l'appel de dismissModalViewControllerAnimated retardé

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
//create window and show it 
window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
window.backgroundColor = [UIColor greenColor]; 
[window makeKeyAndVisible]; 


//create the main view controller and add its view to the window 
mainViewCtrl = [MainViewController alloc]; 
[window addSubview:mainViewCtrl.view]; 


//show splash screen 
UIImage *image  = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"default.png" ofType:nil]]; 
splashViewCtrl = [[UIViewController alloc] init]; 
splashViewCtrl.view = [[UIImageView alloc] initWithImage:image]; 
[mainViewCtrl presentModalViewController:splashViewCtrl animated:NO]; 

//setup callback to dismiss 
[self performSelector:@selector(hideSplash) withObject:nil afterDelay:2.0]; 

return(true); 
} 

//hide splash screen callback 
- (void)hideSplash { 
[[self mainViewCtrl] dismissModalViewControllerAnimated:YES]; 
} 

Et tout cela fonctionne parfaitement bien, sauf lorsque le hideSplash est appelé au bout de 2 secondes, l'application se bloque avec un EXC_BAD_ACCESS. Si je commente la ligne de sélection exécuter et appeler le hidesplash immédiatement après comme ceci:

[mainViewCtrl presentModalViewController:splashViewCtrl animated:NO]; 

[self hideSplash]; 

La vue modale est rejetée à juste titre. Je suis assez sûr que c'est un problème de gestion de la mémoire mais je ne suis pas sûr de ce que je fais mal ici. Est-ce que quelqu'un a des idées de ce que cela pourrait être ou comment correctement déboguer cela afin que je puisse retarder le renvoi?

Merci

Répondre

1

Ce fait un peu bizarre:

mainViewCtrl = [MainViewController alloc]; 

Essayez d'ajouter l'appel d'initialisation à elle.

+0

qui ont fixé le! Merci beaucoup de l'avoir signalé = D – katbyte

1
//show splash screen 
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"default.png" ofType:nil]]; 
splashViewCtrl = [[UIViewController alloc] init]; 
splashViewCtrl.view = [[UIImageView alloc] initWithImage:image]; 
[mainViewCtrl presentModalViewController:splashViewCtrl animated:NO]; 

Modifier ce qui précède à ce ci-dessous:

//show splash screen 
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"default.png" ofType:nil]]; 
splashViewCtrl = [[UIViewController alloc] init]; 
splashViewCtrl.view = [[UIImageView alloc] initWithImage:image]; 
[mainViewCtrl presentModalViewController:splashViewCtrl animated:NO]; 
[mainViewCtrl release]; //Add this line !!!!