J'ai une variable, editForm, qui est utilisée comme un pointeur vers un contrôleur de vue. Plus tard, j'utilise une méthode déléguée pour publier editForm lorsque l'utilisateur appuie sur le bouton pour fermer la vue. Le problème est que la vue doit souvent être recréée avec une nouvelle ardoise. Y at-il un moyen de libérer le contrôleur tout en gardant le pointeur vide prêt pour les instanciations futures? Ou un moyen de redéclarer le "EditFormViewController * editForm;" déclaration à l'intérieur d'une méthode?Libérer le contrôleur, mais garder le pointeur vide?
Edition, voici la méthode de la openeditform:
- (void)openeditform:(NSString*)editId {
EditFormViewController* editFormController = [[EditFormViewController alloc] initWithNibName:@"EditFormView" bundle:nil editId:editId];
[editFormController.view setFrame:CGRectMake(0, 0, 640, 460)];
[self.view addSubview:editFormController.view];
editFormController.delegate = self;
[UIView beginAnimations:@"editform view open" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view.superview cache:YES];
[editFormController.view setFrame:CGRectMake(0, 0, 320, 460)];
[UIView commitAnimations];
self.editForm = editFormController;
[editFormController release];
}
Pour Jerry Jones, voici les bits pertinents pour la suppression de la vue.
EditFormViewController.m:
- (void) closeEditForm {
[UIView beginAnimations:@"editform view close" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view.superview cache:YES];
//[UIView setAnimationDelegate:self];
[self.view removeFromSuperview];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate reloadEditViewTable];
[UIView commitAnimations];
[delegate didDismissEditFormView];
}
Et la méthode déléguée, qui est actuellement pas utilisé pour quoi que ce soit, puisque je mis en œuvre la suggestion de Estarriol, ce qui ne fait pas pleinement ce que je veux encore faire:
- (void)didDismissEditFormView {
NSLog(@"Fired delegate.");
//[editForm release];
}
Ne fonctionne pas. Il finit par charger à nouveau la même instance de vue, avec les mêmes valeurs que celle fermée. (Ou je peux libérer self.editForm et puis je ne peux pas réinstancier la vue.) –
J'ai édité ma question pour montrer la méthode openeditform complète maintenant que j'ai fait les changements. –
En outre, il semble se briser après l'ouverture et la fermeture de la vue trois fois, ce qui semble indiquer une fuite de mémoire ... –