Conteneur UIViewController Pas de le Libérer de l'Enfant de voir les Contrôleurs

J'ai un conteneur personnalisé UIViewController qui a six enfants UIViewControllers, et un ensemble d'onglets que l'utilisateur interagit avec pour basculer entre la vue enfant contrôleurs. Le problème, c'est quand mon conteneur de-vue-contrôleur est relâché, l'enfant de voir les contrôleurs ne sont pas.

J'ai vérifié que l'enfant de voir les contrôleurs ne sont pas libérés par l'ajout d'un peu de débogage de code à leur dealloc méthodes, et ils sont remis en liberté tant que leur vue ne sont pas ajoutés au conteneur affichage du contrôleur de vue.

Ci-dessous est un extrait du code que j'utilise pour créer mes conteneur personnalisé-vue-contrôleur. Le viewController les pointeurs sont iVars. Je suis également à l'aide de l'ARC de sorte que c'est pourquoi il n'y a pas de version d'appels.

- (void)init 
{
    if ((self = [super init])) { 
        vc1 = [[UIViewController alloc] init];
        [self addChildViewController:vc1];

        vc2 = [[UIViewController alloc] init];
        [self addChildViewController:vc2];

        vc3 = [[UIViewController alloc] init];
        [self addChildViewController:vc3];

        vc4 = [[UIViewController alloc] init];
        [self addChildViewController:vc4];

        vc5 = [[UIViewController alloc] init];
        [self addChildViewController:vc5];

        vc6 = [[UIViewController alloc] init];
        [self addChildViewController:vc6];
    }
    return self;
}

- (void)dealloc
{
    [vc1 removeFromParentViewController];
    vc1 = nil;

    [vc2 removeFromParentViewController];
    vc2 = nil;

    [vc3 removeFromParentViewController];
    vc3 = nil;

    [vc4 removeFromParentViewController];
    vc4 = nil;

    [vc5 removeFromParentViewController];
    vc5 = nil;

    [vc6 removeFromParentViewController];
    vc6 = nil;
}

- (void)switchFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController
{
    if (fromViewController) {
        [fromViewController.view removeFromSuperview];
    }

    [self.view addSubview:toViewController];
    toViewController.view.frame = self.view.bounds;
}

Avez-vous tous avez des idées de ce que je fais mal?

Par curiosité, vous faites référence à des onglets de contrôle auxquelles l'enfant est présenté. Comment avez-vous mis en place? Je demande parce que je vois que vous avez de l'enfant frame comme étant à self.view.frame, donc je ne comprends pas d'où le parent de la vue que vous seriez en montrant ce contrôle onglet.
C'était juste un super exemple rapide de ce que mon code est en train de faire, il n'est donc pas 100% pensé. Dans mon application pratique il y a des onglets qui courent le long de la côte à la verticale, et puis il y a une vue dans la vue principale contrôleur de l'enfant-vue-contrôleur de la vue sont mis en, et leur image est réglée sur childViewController.frame = contentContainerView.limites;
Qui fait sens. À première vue, en regardant un exemple de confinement où il prenait tout l'écran vient de me demander si le confinement a été nécessaire. On dirait que vous avez un bon plan, si. Désolé de vous harceler. 😉

OriginalL'auteur miken.mkndev | 2012-12-12