präsentieren View-controller funktioniert nicht
Hallo, ich entwickle eine Anwendung in die ich bin präsentiert neue UIViewController
mit
[self presentViewController:VC animated:NO completion:nil];
und in neue vorgestellt view-controller bewege ich mich zurück zur vorherigen Ansicht mit
[self presentViewController:oldVC animated:NO completion:nil];
ist meine Forderung, weil es keine Garantie, dass, von wo aus dieser Ansicht präsentiert werden.
Aber das Problem ist, dass wenn ich die alten view-controller geht es um viewDidLoad
aber nicht angezeigt alten-view-controller bleibt es auf demselben view controller.
kann mir jemand sagen, warum dies passiert ist, jeder, was mache ich falsch??
- Sie gehen nicht zurück zu den vorherigen viewcontroller darstellen, verwenden Sie
[self dismissViewControllerAnimated:NO completion:nil];
- Es ist meine Verpflichtung zur Nutzung
[self presentViewController:oldVC animated:NO completion:nil];
und nicht[self dismissViewControllerAnimated:NO completion:nil]
- Gut, dann wirst du in große Probleme später, da
presentViewController:
wird ein viewController auf den aktuellen. So ist Sie am Ende in einem Stapel von view-über den anderen, bis das Gerät läuft out of memory. Es ist nämlich, wie ich nach unten gehen Treppen, aber nur die Treppe, die nach oben gehen. Und diepresentViewController:
eine Anforderung, nebendismissViewControllerAnimated:
istpresentViewController:
Gegenstück. - Können wir nicht entlassen älteren view-controller einmal weiter-view-controller vorgestellt?
- Nein, da die älteren Ansicht ist die Ansicht präsentiert die neue Ansicht.
- Können Sie bitte erläutern Sie auf Ihre Anforderung? Was genau suchst du?
- Ich muss gehen Sie zu der vorherigen Ansicht, basierend auf bestimmten Bedingungen, wie, wenn(flag==1) goto mal wieder zu view1 sonst gehen Sie zurück zu älteren view-controller. wie klug, ich bin mit Bedingungen basierend auf was muss ich wechseln zwischen den view-Controllern
- und wollen Sie behalten diese Werte in Ihrem vorherigen Ansicht?
- Verwenden Sie storyboard?
- Nein, es ist nicht obligatorisch zu behalten-Werte in der vorherigen Ansicht
- ja, ich bin mit storyboard
- Wie Sie viewController Onject können, die Sie teilen Ihren code?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sollten nicht gehen Sie zurück zur vorherigen Ansicht-controller von
presentViewController:
, weil es kann zu einer nie endenden Schleife, und wenn der Benutzer dann die app zum Absturz früher oder später.Aber wenn die animation erforderlich ist (d.h. das animieren von unten nach oben), dann können Sie Ihre eigenen dismissViewController Methode, die animieren Sie Ihre oldVC von unten nach oben und in die Vollendung-block, die animation aufrufen
[self dismissViewControllerAnimated:NO completion:nil]
.Die Lösung gefunden für mein problem!
Anstelle der Verwendung von
presentViewController:
unddismissViewController:
Methoden, die ich erstellt habe, segue und fragte Anwendung ausführen segue programmgesteuert als pro-flow-Bedarf auf Basis-identifier von segue. Lösung gefunden auf https://stackoverflow.com/a/21241276/1882781Nur einen Zeiger. Die segue Methode wird für Sie sicher. Aber, wenn Sie mit dieser Methode präsentieren
view controller
s Modal, dann wird die Vorherigeview controller
s bleiben inmemory
bis Sie manuelldismiss
Sie.Dies wird führen zu schweren
memory
Probleme mit der app-Nutzung.Bessere alternative, wenn auch nicht der beste, ist in den Griff zu bekommen der
AppDelegate
einzigen gemeinsamen Instanz, und seinerootViewController
Ihr vorgestelltviewController
.zB:-
Diese wird freigeben die bestehenden
viewController
Objekt aus dem Speicher.PS: Stellen Sie sicher, dass der import der
appdelegate.h
- Datei in allen Klassen, oder Sie können alternativ schreiben Sie diese in die .pch Datei.Hoffe, das hilft! 🙂