Frage

Ich habe eine Frage. Vielleicht 2 Fragen.

Erster bezieht sich auf diesen Code-Stück:

generasacodicetagpre.

Ich möchte, dass diese Methode keine Leere ist, ich möchte, dass es eine BOOL zurückgibt, oder etwas, das ich verwenden kann, den ich verwenden kann: Benutzer ist angemeldet> ok Tun Sie etwas irgendwo in der App. Benutzer ist nicht angemeldet> OK fordert den Benutzer auf einen Bildschirm auf, in dem er seine Anmeldeinformationen einführen und sich anmelden kann.

Die zweite Frage hängt mit diesem Code-Stück zusammen:

generasacodicetagpre.

Ich möchte, dass diese Methode mir einen Nsarray mit der analysierten JSON zurückgibt, den ich verwenden kann, wo immer ich möchte.

Diese Methoden sind in ein Modell namens Networkmodel (NSObject-Unterklasse) enthalten. Ich frage mich nur, warum ich alles in den Blöcken tun sollte. Ich hätte, dass Stücke mit dem Netzwerk überall zusammen interagieren und nicht in einem einzigartigen Ort / einer einzigartigen Stelle / Klasse organisiert werden. Gibt es eine Möglichkeit, das zu tun? Ich möchte nicht 5 Zeilen von Anfragen jeden ViewController haben. Ich möchte Methoden definieren, die ich von jedem AnsichtController anrufen kann (offensichtlich importieren Sie die Header-Dateien, in denen dies erforderlich ist).

Alle Vorschläge? Danke für deinen Rat!

War es hilfreich?

Lösung

Sie können dies mit 2 Ansätzen tun, eine Änderung Ihrer Methoden, um Blöcke zu verwenden, oder verwenden Sie ein Semaphor, um auf die Async-Anforderung zu warten:

mit Semaphor (der hässliche Weise)

generasacodicetagpre.

der richtige Weg, um es zu tun

generasacodicetagpre.

Für Ihre zweite Frage können Sie eine Blockvariable in Ihrer Netzwerkklasse festlegen, die aufgerufen wird, wenn die Anforderung abgeschlossen ist oder es fehlschlägt.

Jedenfalls denke ich, dass Sie mit Blöcken nicht ganz vertraut sind (wegen Ihrer zweiten Frage), und ich denke, nach ein paar Blöcken werden Sie anfangen, sie zu mögen, und Sie werden sehen, dass der Code nicht kompliziert ist, wenn Sie kleine Ausschnitte des Codes habenDass Sie anfordern und analysieren, auch Sie werden sehen, dass es soooo ist einfach, sie zu debuggen und die Probleme zu finden, meine, das war auch mein Fall, als ich anfing, mit Blöcken zu arbeiten.

mit einer Blockvariablen

generasacodicetagpre.

Andere Tipps

Ich habe etwas Ähnliches, etwas Ähnliches, gefragt.Ich glaube, Sie werden dort Ihre Lösung finden. Übergeben Sie Blöcke zu einer AFNetworking-Methode?

Im Allgemeinen müssen Sie die Art und Weise ändern, wie Sie denkst, dass Sie die Daten von "Wenn Sie angemeldet sind, um" eingeloggtes Return-BOOL "abrufen sollten, um" Überprüfen Sie, ob ich mich anmelden kann, falls dies nicht im AfNetwork-Block tut.

Der obige Link beantwortet auch Ihre zweite Frage.

Ihre Methoden sollten einen Block (oder zwei) annehmen, der aus den AFNNetworking-Erfolgsblöcken (oder MUSIC) ausgeführt wird.Dieser Ansatz umarmt die asynchrone Natur dessen, was Sie versuchen.Sie können den Methoden aufgrund dieser Asynchronität keine Rückgabewerte hinzufügen.


Sie würden also Ihre Methode ändern an:

generasacodicetagpre.

so wenig Aktualisierung in der Situation (dank all den kostbaren Vorschlägen ..Danke Jungs!). Jetzt sieht mein Code so aus (in meinem Netzwerkmodel.M, offensichtlich habe ich die Methode an networkmodel.h hinzugefügt, damit ich es überall nennen kann):

generasacodicetagpre.

In meiner AppDelegate.h habe ich mein networkmodel.h aufgenommen und in mein appdelegate.m habe ich jetzt den folgenden code:

generasacodicetagpre.

und es funktioniert irgendwie gut. Aber jetzt habe ich noch eine andere Frage. Wenn ich die App ausführe, ist etwas Seltsames passiert. Sobald er die Informationen zum Benutzer-Login-Status abruft, springt es von VC (der angegebene InitialView Controller - Start00 auf meinem Storyboard) bis VC (LoggeDinvc - Start01 auf meinem Storyboard). Gibt es eine Möglichkeit, diesen Kinda nicht zum Benutzer zu zeigen? Oder das ist ein normales Verhalten? Jetzt sieht der Benutzer für einen zweiten den ersten Bildschirm und dann den Bildschirm, den er tatsächlich sehen sollte (weil er angemeldet ist).

Aber ich denke, der einfachste Weg, mit Blöcken zu arbeiten, und all das ist, sie richtig zu verwenden, wo ich sie brauche. Anstatt zu versuchen, sie in Methoden oder Klassen einzukapseln oder was auch immer. Sobald Daten da sind, mache ich das, was ich habe, direkt in den Erfolgs- oder Misserfolgblock. Denke ich richtig?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top