Ich arbeite mit etwas Code, den ich umgestalten muss. Ein View-Controller fungiert als Container für zwei andere View-Controller und wechselt zwischen ihnen, wie im folgenden Code gezeigt.Die Verwendung von addChildViewController verstehen
Dies ist möglicherweise nicht das beste Design. Der Austausch der View-Controller auf diese Weise ist möglicherweise nicht erforderlich. Ich verstehe das. Wenn ich jedoch mit diesem Code arbeite, möchte ich weiter verstehen, was mit dem addChildViewController-Aufruf passiert. Ich konnte die Antwort in Apples Dokumenten oder in verwandten Fragen hier nicht finden (wahrscheinlich ein Hinweis darauf, dass das Design geändert werden muss).
Speziell - wie behandelt der Container-View-Controller eine Situation, in der er aufgefordert wird, einen Child-View-Controller hinzuzufügen, den er bereits hinzugefügt hat? Erkennt es, dass dieses View-Controller-Objekt bereits hinzugefügt wurde?
z. wenn der Code unten in einer Methode ist - und das Verfahren wird zweimal aufgerufen ...
[self addChildViewController:viewControllerB];
[self.view addSubview:viewControllerB.view];
[viewControllerB didMoveToParentViewController:self];
[viewControllerA willMoveToParentViewController:nil];
[viewControllerA.view removeFromSuperview];
[viewControllerA removeFromParentViewController];
Danke, Gavin
Hallo Jesper, danke. Ich habe diesen Code geerbt, also werde ich etwas nacharbeiten. Das Austauschen von untergeordneten Ansichtscontrollern ist ein vollständiges Implementierungsdetail innerhalb des Ansichtscontrollers "Container". In der öffentlichen Schnittstelle dieser Klasse gibt es nichts, was es Clients ermöglicht, die Ansichten zu ändern. Es ist ein internes Design, um einen von zwei View-Controllern anzuzeigen ...Beim Durchlaufen habe ich festgestellt, dass die Addition zweimal vorkommt (zB eine Wiederholung von applicationWillEnterForeground). Ich habe keine negativen Auswirkungen davon bemerkt ... Ich weiß, ich muss es ändern, aber ich bin auch neugierig, was los ist;) –
Ah, das macht Sinn. Versuchen Sie, die Handhabung so wenig wie möglich zu manipulieren. Eine andere Sache, die das Debuggen einfacher macht (und die das Problem lösen könnte, wenn Sie mit einer Umgebung mit schlechtem Verhalten zu tun haben) ist, diese Methoden "idempotent" zu machen, dh sie ein- oder 42-mal aufzurufen, sind funktional äquivalent und werden dasselbe tun. Wohlverstandener Code sollte mehr oder weniger ohne Widerstand darin fallen. Insbesondere Benachrichtigungen ('applicationWillEnterForeground' und dergleichen) werden normalerweise aus dem UI-Thread/der UI-Warteschlange entfernt. Achten Sie also darauf. – Jesper