L'objet a probablement été modifié après avoir été libéré

Je suis en train de travailler sur un projet sur l'iPhone. Je suis maintenant le lancement d'une nouvelle UIViewController à partir d'un autre UIViewController, puis basculer entre eux. Voici mon code.

iGreenAppDelegate *delegate = [UIApplication sharedApplication].delegate;
if(checkInViewController) {
    [checkInViewController release];
    checkInViewController = nil;
}
checkInViewController = [[CheckInViewController alloc] initWithCheckpoint:checkpoint];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:[delegate window] cache:YES];
[[delegate rootTabBarController].view removeFromSuperview];
[[delegate window] addSubview:checkInViewController.view];
[UIView commitAnimations];

Le Problème, c'est la deuxième fois que j'ai lancer le UIViewController, je veux le libérer pour éviter de causer des fuites de mémoire. Le Débogueur affiche

iGreen(916,0x3f60348c) malloc: erreur pour objet 0x130350: somme de contrôle incorrecte pour objet libéré - l'objet a probablement été modifié après avoir été libéré.
définissez un point d'arrêt dans malloc_error_break pour déboguer

C'est étrange car des codes similaires dans d'autres parties ne retourne pas d'erreur de ce type. De plus, j'ai essayé autorelease, mais le programme sera immédiatement crash et le Debugger me dit que je suis la modification finalisé couches.

J'ai travaillé sur le problème pour une nuit entière, et encore confus à ce sujet.

source d'informationauteur Stone | 2011-06-11