In meiner App habe ich diese Klasse, um Daten von meinem Server zu bekommen:
%Vor%Dann lade ich in meinem View Controller das Modell:
%Vor% Alles funktioniert, außer dass das JSON-Wörterbuch leer ist, was bedeutet, dass es keine Angebote gibt, die MBProgressHUD
weiter dreht.
Ich möchte den Aktivitätsindikator stoppen, indem ich stattdessen eine Unteransicht hinzufüge, die besagt, dass es keine Angebote gibt. Irgendein Vorschlag würde sehr geschätzt werden.
Ich habe es versucht:
if offers.isEmpty{
MBProgressHUD.hideAllHUDsForView(self.view, animated: true)
}
und auch
if offers == 0 {
MBProgressHUD.hideAllHUDsForView(self.view, animated: true)
}
aber es funktioniert nicht
Danke
Dies geschieht, weil Sie das HUD in die Hauptwarteschlange stellen, aber versuchen, es aus einem anderen zu entfernen. Alle UI-bezogenen Änderungen sollten in main_queue()
Versuchen Sie es mit diesem Code
%Vor%Ich empfehle ein kleines Redesign des Codes. Ich habe deinen ursprünglichen Code ein wenig modifiziert. Hier ist API-Klasse:
%Vor%}
Change ist ein Aufruf des Completion-Handlers, auch im Falle eines Fehlers bei der Netzwerkkommunikation und im Falle eines Fehlers beim JSON-Parsing.
Entsprechende Implementierung von VC folgt:
%Vor%}
Aus meiner Sicht ist das Schließen besser, aber hängt von Ihrer Implementierung ab. Sie können Ihre Implementierung mit Methode anstelle von Closure verwenden und nur hud-Variable auf Instanzebene definieren.
Ich hoffe, es hilft Ihnen, Ihr Problem zu lösen (Ich habe auf Simulator und iPhone getestet und funktioniert gut mit einigen Test-Stub Framework).
Jeder Pfad in loadOffers
muss die Beendigung des Abschlusses aufrufen. Wenn Sie eine if let
-Anweisung haben, müssen Sie den Fall else
berücksichtigen. Wenn das Optionale NULL ist, müssen Sie den Abschluss noch aufrufen. Sie können in diesem Fall ein leeres Array übergeben oder Sie können einen Fehlerparameter zu Ihrem Abschlussblock hinzufügen, damit der View-Controller mehr Informationen darüber erhält, warum er nichts zurückbekommt.