Ich habe einen benutzerdefinierten Container UIViewController mit sechs untergeordneten UIViewControllern und einer Reihe von Registerkarten, mit denen der Benutzer interagiert, um zwischen den untergeordneten View-Controllern zu wechseln. Das Problem ist, wenn mein Container-View-Controller freigegeben ist, sind die Child-View-Controller nicht.Container UIViewController gibt seine untergeordneten View-Controller nicht frei
Ich habe überprüft, dass die Child View-Controller nicht durch Hinzufügen von Debugging-Code zu ihren Dealloc-Methoden freigegeben werden, und sie sind freigegeben, solange ihre Ansichten der Containeransicht Controller-Ansicht nicht hinzugefügt werden.
Im Folgenden finden Sie einen Auszug aus dem Code, mit dem ich meinen benutzerdefinierten Containeransicht-Controller erstelle. Die viewController-Zeiger sind iVars. Ich benutze auch ARC, deshalb gibt es keine Release-Anrufe.
- (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;
}
Haben Sie irgendwelche Ideen, was ich falsch mache?
Aus Neugier, verweisen Sie Registerkarten, die steuern, welches Kind dargestellt wird. Wie hast du das umgesetzt? Ich frage, weil ich sehe, dass der 'frame' des Kindes auf 'self.view.frame' gesetzt ist, also verstehe ich nicht, wo in der Ansicht des Elternteils Sie dieses Tab-Control anzeigen würden. – Rob
Das war nur ein super schnelles Beispiel dessen, was mein tatsächlicher Code macht, also ist es nicht 100% durchdacht. In meiner praktischen Anwendung gibt es Tabs, die vertikal entlang der Seite laufen, und dann gibt es eine Ansicht innerhalb des Hauptansicht-Controllers, in die die Ansichten des Kind-View-Controllers eingefügt werden, und dann wird ihr Frame auf childViewController.frame = contentContainerView.bounds gesetzt; –
Das macht Sinn. Auf den ersten Blick, als ich mir ein Beispiel von Eindämmung ansah, wo es den ganzen Bildschirm einnahm, fragte ich mich, ob Eindämmung nötig war. Hört sich an, als hättest du einen guten Plan. Tut mir leid, dich zu belästigen. ;) – Rob