2010-11-25 4 views
0

Cher tout, j'ai une application basée sur la navigation avec environ 60 vues.iPhone App tombe en panne en raison de la mémoire faible, mais fonctionne bien dans le simulateur

J'ai couru avec les éléments suivants: 1. Construire et analyser: bulid réussit sans se plaint. 2. Allocation des instruments et fuites: pas de fuite.

Cependant, l'application est écrasé dans l'iPhone ou l'iPad, mais fonctionne très bien dans le simulateur. L'incident se produit vers la 50ème vue. Il n'y a pas de rapports d'erreur mais je vois LowMemory.log dans le dossier crashreporter.

J'ai mis à jour mon iPhone et iPad à 4,2

Est-ce que quelqu'un a des idées ce qui pourrait être mal? Je lis et dépanne depuis une semaine.

Merci pour toutes les réponses.

Mon application a une vue racine appelé contentViewController et les utilisateurs peuvent accéder à 4 jeux-questionnaires à partir d'ici.

Ceci est le code que j'utilise pour revenir à la vue racine.

- (void)goHome { 
UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle: @"Warning" 
         message: @"Proceed?" 
         delegate: self 
         cancelButtonTitle:@"Yes" 
         otherButtonTitles:@"No",nil]; 
[alert show]; 
[alert release]; 

}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
[[self navigationController] setNavigationBarHidden:NO animated:YES]; 
if (buttonIndex == 0) { 
    NSArray * subviews = [self.view subviews]; 
    [subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    self.view = nil; 
    if (self.contentViewController == nil) 
    { 
     ContentViewController *aViewController = [[ContentViewController alloc] 
                initWithNibName:@"ContentViewController" bundle:[NSBundle mainBundle]]; 
     self.contentViewController = aViewController; 
     [aViewController release]; 
    } 
    [self.navigationController pushViewController:self.contentViewController animated:YES]; 
} 

}

Exemple de code pour les vues pousser:

-(IBAction) buttonArrowClicked:(id)sender { 
NSURL *tapSound = [[NSBundle mainBundle] URLForResource: @"click" 
              withExtension: @"aif"]; 

// Store the URL as a CFURLRef instance 
self.soundFileURLRef = (CFURLRef) [tapSound retain]; 

// Create a system sound object representing the sound file. 
AudioServicesCreateSystemSoundID (

            soundFileURLRef, 
            &soundFileObject 
           ); 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (![[defaults stringForKey:@"sound"] isEqualToString:@"NO"]) { 
    AudioServicesPlaySystemSound (soundFileObject); 
}  

if (self.exercise2ViewController == nil) 
{ 
    Exercise2ViewController *aViewController = [[Exercise2ViewController alloc] 
               initWithNibName:@"Exercise2ViewController" bundle:[NSBundle mainBundle]]; 
    self.exercise2ViewController = aViewController; 
    [aViewController release]; 
} 
[self.navigationController pushViewController:self.exercise2ViewController animated:YES]; 

}

Répondre

3

Normalement, vous ne rencontrerez des problèmes de mémoire lors de l'exécution sous la Simul ator, donc ces erreurs ne sont pas automatiquement rencontrées sur cette plate-forme.

Le simulateur a cependant une fonction où vous pouvez déclencher manuellement un événement de mémoire faible. Si c'est en fait la cause du crash sur le périphérique, alors il est possible que vous puissiez déclencher le même bug dans le simulateur de cette manière.

0

Partage du code sur la façon dont vous appuyez sur les contrôleurs de vue permettra aux autres de vous aider.

Vous pouvez pop à la racine contrôleur de vue plus facilement en faisant:

[self.navigationController popToRootViewControllerAnimated:YES]; 

Vous poussiez en fait une nouvelle instance de votre contrôleur de vue racine dans le code que vous avez partagé.

+0

Merci pour toutes les réponses. J'ai ajouté quelques codes pour votre avis – Ian

+0

Désolé réalisé que j'ai posté double. S'il vous plaît se référer à http://stackoverflow.com/questions/4281713/iphone-app-crashes-due-to-low-memory-but-works-fine-in-simulator – Ian

+0

Merci beaucoup de m'avoir sauvé. Mon application ne semble pas tomber en panne maintenant! Il se bloque toujours dans mes appareils lorsque je cours en mode débogage. Cependant, il fonctionne bien dans mes appareils lorsqu'il est connecté. Est-ce normal? – Ian

Questions connexes