Ich bin neu bei swift und ios Programmierung im Allgemeinen. Ich versuche eine modale Ansicht anzuzeigen, wenn meine App zuerst lädt, was sie tut. Das Problem, auf das ich stoße, ist, dass mein Modal immer und immer wieder erscheint. Ich bin mir nicht sicher, wo ich falsch liege.
BONUSFRAGE: Letztendlich möchte ich, dass dies nur passiert, wenn der Benutzer die App das erste Mal öffnet.
%Vor% Wenn Sie die modale Ansicht schließen, zeigen Sie Ihre ViewController
-Ansicht erneut an, feuern viewDidAppear
noch einmal und geben eine Endlosschleife ein, in der Ihre modale Ansicht angezeigt wird, da die erste Ansicht immer "erscheint"
Ich würde vorschlagen, dies in viewDidLoad
zu tun, da die Ansicht nur einmal geladen werden soll. Experimentieren Sie mit diesen Ereignissen und sehen Sie, wann sie ausgelöst werden.
Wie für das Brennen nur einmal würde ich empfehlen, eine Markierung in localStorage (plist) zu setzen, die angibt, ob es das erste Mal ist, dass der Benutzer die App öffnet oder nicht. Setzen Sie zum Beispiel ein Flag in der viewDidLoad
der ersten Ansicht und wenn dieses Flag falsch ist, zeigen Sie Ihre modale Ansicht an und setzen Sie das Flag auf true.
Hier ist eine Frage zum Schreiben in plists in Swift: Speichern von Daten in .plist Datei in Swift
Ein paar Beobachtungen:
Sagt Ihr, dass diese Seite immer wieder erscheint , während Sie die App verwenden? Das würde darauf hindeuten, dass Sie mehrere Instanzen dieses View-Controllers instanziiert haben. Zum Beispiel können Sie einen Rücksprung zu diesem View-Controller machen (der eine neue Instanz erzeugt), anstatt ihn zurück zu rollen / zu löschen (was zur vorherigen Instanz zurückkehrt).
Ich würde vorschlagen, dass Sie in viewDidLoad
einen Haltepunkt oder eine Protokollierungsanweisung haben und bestätigen Sie, dass Sie dies nur einmal sehen. Wenn Sie es mehrmals sehen, bedeutet das, dass Sie eine zirkuläre Referenz in Ihren Storyboard-Szenen haben (und, im Übrigen, Sie verlassen den Speicher, eine Art von Leck).
Um damit umzugehen, dass Sie sich nur einmal zwischen den Anwendungen der App präsentieren, müssen Sie dieses introModalDidDisplay
in irgendeiner Form von persistentem Speicher speichern. Oft wird NSUserDefaults
dafür verwendet. Definieren Sie beispielsweise introModalDidDisplay
, um den Status in den Standardbenutzereinstellungen nachzuschlagen:
Dann kann Ihr showIntroModal diese Einstellung in den Benutzervorgaben aktualisieren:
%Vor%Natürlich können Sie jede gewünschte persistente Speichertechnik verwenden (Plist, Archiv, Benutzervorgaben, Core Data, SQLite), aber die Idee ist dieselbe: Abrufen des Status vom persistenten Speicher und sobald der Intro-Bildschirm angezeigt wurde, Aktualisieren Sie diesen persistenten Speicher entsprechend.
Übrigens, indem wir dies im permanenten Speicher nachschlagen, beheben wir auch das Symptom des Problems, das ich in Punkt 1 besprochen habe. Aber Sie möchten die Ursache dieses ersten Punktes auch wirklich beheben, da sonst Speicher verloren geht (wenn Sie tatsächlich mehrere Kopien der Klasse ViewController
instanziieren).
Übrigens, wenn ich in die Zukunft schaue, anstatt nur einen booleschen Wert zu speichern, könnte ich vorschlagen, auch eine Versionsnummer zu speichern. Auf diese Weise können Sie, wenn Sie die Version 2.0 der App veröffentlichen, entscheiden, ob die Benutzer der v1.0 den aktualisierten Intro-Bildschirm wieder sehen können (oder vielleicht einen benutzerdefinierten, der sich auf das Neue konzentriert).