2010-04-03 8 views
0

J'ai poussé le contrôleur de vue et chargé le bouton arrondi WebView et le bouton rectangulaire rectangulaire personnalisé dans le coin inférieur gauche de la vue en utilisant la méthode par programmation.Bouton de retour du bouton de retour personnalisé sur le contrôleur de vue poussée

-(void)loadView { 


     CGRect frame = CGRectMake(0.0, 0.0, 480, 320); 
    WebView = [[[UIWebView alloc] initWithFrame:frame] autorelease]; 
    WebView.backgroundColor = [UIColor whiteColor]; 
    WebView.scalesPageToFit = YES; 
    WebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin); 
    WebView.autoresizesSubviews = YES; 
    WebView.exclusiveTouch = YES; 

    WebView.clearsContextBeforeDrawing = YES; 

self.roundedButtonType = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
self.roundedButtonType.frame = CGRectMake(416.0, 270.0, 44, 19); 
[self.roundedButtonType setTitle:@"Back" forState:UIControlStateNormal]; 
self.roundedButtonType.backgroundColor = [UIColor grayColor]; 
[self.roundedButtonType addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 

self.view = WebView; 

[self.view addSubview: self.roundedButtonType ]; 
[WebView release]; 


} 

C'est l'action que j'ai ajoutée en tant que bouton de navigation arrière.

-(void)back:(id)sender{ 
[self.navigationController popViewControllerAnimated:YES]; 
} 

-(void)viewDidUnload{ 
self.WebView = nil; 
self.roundedButtonType = nil; 
} 

-(void)dealloc{ 
[roundedButtonType release]; 
[super dealloc]; 
} 

Ici, quand cliquez sur le bouton Retour il montre la vue précédente, mais l'application est resté coincé dans cette vue et GDB affiche signal reçu programme: message EXC_BAD_ACCESS.

comment résoudre ce problème?

Merci,

Répondre

0

Vous avez -autorelease « d WebView ici:

WebView = [[[UIWebView alloc] initWithFrame:frame] autorelease]; 

mais vous -release à nouveau!

[self.view addSubview: self.roundedButtonType ]; 
[WebView release]; 

Essayez de supprimer l'une des versions.


En outre,

self.roundedButtonType = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 

moins roundedButtonType est déclaré comme @property(assign,...), vous n'avez pas besoin d'envoyer le message -retain. Et il est préférable de configurer le cadre, le titre, etc. avant d'attribuer à self.roundedButtonType, car chaque appel à self.roundedButtonType n'est pas gratuit.

+0

Merci, Kenny J'ai enlevé un d'autorelease à WebView et c'est le travail dans mon cas bien. [WebView release] publiera-t-il également la requête http ou déchargera-t-il des données de WebView et la connexion à URL sera-t-elle active? Je m'occuperai également du cadre d'installation et du titre avant l'affectation. Thasnk – TechFusion

+0

@Tech: Tout ce que la vue Web va posséder sera '-release''d lorsque la vue web est '-dealloc''ed (note release ≠ deallocate). Dans votre cas, 'self' va" conserver "la vue web lors de l'assignation' self.view', donc "-release''ing ne supprimera pas les connexions. – kennytm

+0

Bonjour Kenny, Je crée aussi self.WebView = nil dans ViewDidUnload(). donc pour tuer la connexion devrais-je ajouter ajouter suite à la tâche dealloc? - (vide) dealloc { [super dealloc] [self.WebView dealloc] // Est-ce correct? Merci, – TechFusion

Questions connexes