Swift 3: Überprüfen von Internet (Reocurring) viewDidAppear nicht

8

Ok, also bin ich Swift gegenüber ziemlich neu und ich bin ein wenig verwirrt darüber, was ich zu tun versuche oder ob ich in die falsche Richtung gehe. ( Ссылка )

Hier ist meine viewDidLoad Methode:

%Vor%

Ich habe dann eine Funktion mit dem Code aus dem Reachability GitHub Project:

%Vor%

Wie Sie sehen können, wenn es kein Internet gibt, ist dies der Code:

%Vor%

Das Dim ist aus ( Ссылка ) Die mainToAlertNoInternet lädt die nächste Ansicht über die aktuelle mit Transparenz, so dass es sich um einen Alert-Stil handelt.

Also, der zweite Abschnitt hat eine Ansicht und einen Knopf darauf. Nichts spektakuläres ist das, was geladen wird, wenn es kein Internet gibt:

Die Schaltfläche "Erneut versuchen" ist mit dem Ausgang des Segu verbunden und führt diese Funktion im First View Controller aus:

%Vor%

Ich habe in der Funktion mainToAlertNoInternet hinzugefügt, so dass, wenn sie auf "try" klicken, es zurück zum ersten Segment geht und den Test erneut ausführt. Wenn ich jedoch erneut versuche, bekomme ich diesen Fehler:

  

Warnung: Versuch zu präsentieren, wessen Sicht sich nicht in der Fensterhierarchie befindet!

Hoffentlich habe ich genug erklärt, was ich aufgebaut habe. Nun zu den Fragen:

1) Wie kann ich diesen Fehler beheben? 2) Mache ich das richtig oder gibt es einen besseren Weg?

Das ist was ich will:

Ich möchte die Internetverbindung überprüfen, sobald die App geladen wird. Wenn keine Verbindung besteht, möchte ich das Segment so anzeigen, wie ich es gemacht habe. Wenn der Benutzer auf Try gain klickt, möchte ich, dass er zum ersten Controller zurückkehrt und den Check erneut ausführt, und wenn noch keine Verbindung besteht, wird das Segment wie anfangs wieder angezeigt. Ich möchte, dass dies ein sich wiederholender Prozess ist, bis es Internet gibt.

Schätze all deine Hilfe. Vielen Dank im Voraus

Bearbeiten:

Ich habe den Funktionsaufruf in der ViewDidAppear-Methode wie folgt hinzugefügt:

%Vor%

Es läuft jedoch nicht. Außerdem wird das DIM in der Funktion unwindFromSecondary nicht aufgerufen, wenn ich dies tue.

Bearbeiten 2:

Habe gerade diese Zeile in meine viewDidAppear eingefügt:

%Vor%

Dies wird zunächst aufgerufen, dann aber nicht wieder.

Frage:

Wie erhalte ich eine Funktion, die ausgeführt wird, wenn nach dem unwindSegue alles wieder geladen ist?

Irgendwelche Gedanken?

Update 3

Ok, also habe ich mir die Antworten unten angesehen:

@MarkP Antwort funktioniert gut. Danke für das Die Antwort von @iSee hat mich jedoch dazu gebracht, darüber nachzudenken, ob ich das vielleicht anders machen sollte.

Ich habe diesem Beitrag eine Bounty für eine detaillierte Antwort hinzugefügt, die mir zeigen kann, wie ich Folgendes erreichen kann:

In meiner App. Ich muss sicherstellen, dass das Internet existiert (vielleicht ein Timer) auf jeder Ansicht, die lädt. Ich möchte es so, dass wie der aktuelle Weg, Wenn es kein Internet gibt es Popup den ViewController mit diesem Übergang:

%Vor%

Es scheint, dass der App-Delegierte der Ort wäre, aber ich bin mir nicht sicher, wie ich das erreichen kann.

Ich bin neu in der iOS-Entwicklung und würde daher etwas Erklärung und Unterricht zu schätzen wissen.

Danke für Ihre Zeit. Es wird sehr geschätzt.

    
JamesG 17.09.2016, 14:20
quelle

3 Antworten

2

Wie @iSee mit den Links darauf hingewiesen hat. Dies liegt daran, dass die Ansicht nicht zur Ansichtshierarchie hinzugefügt wurde, sodass Sie nicht zu dieser Ansicht wechseln können. Dafür wird self.dismissViewControllerAnimated benötigt:

%Vor%     
MarkP 18.09.2016, 23:22
quelle
3

Ich nehme an, Sie sind neu in der iOS-Entwicklung im Allgemeinen.

  1. Die Warnung hat nichts mit Ihrem Internetkonnektivitätscode zu tun.

  2. Die Warnung, die Sie erhalten, ist kein Fehler. Es ist nur eine Warnung.

  3. Der Grund, warum Sie das bekommen, wird in diesem Link und dies
  4. Um diese Warnung loszuwerden, sollten Sie performSegue nicht von viewDidLoad aufrufen (weitere Informationen finden Sie unter dem obigen Link).
  5. Um Ihre Netzwerküberprüfungen durchzuführen, ist es ratsam, das AppDelegate zu verwenden (gibt Ihnen eine bessere Kontrolle über den Fluss der App)

Alles Gute:)

BEARBEITEN: Bitte beachten Sie diesen Link hier für weitere Informationen dazu. Ich könnte es hier einfach erneut hochladen, aber da es bereits beantwortet ist, können Sie auf den obigen Link verweisen, warum es passiert und wie man es vermeidet.

    
iSee 17.09.2016 15:12
quelle
0

Ich verwende dies im App-Delegaten - & gt;

%Vor%

Und dann das in der Basisdatei - & gt;

%Vor%     
Kakshil Shah 19.09.2016 06:24
quelle

Tags und Links