Wie Sie MBProgressHUD stoppen und eine Unteransicht hinzufügen, wenn der Server keine Daten zurückgibt

8

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

    
mat 10.05.2015, 12:15
quelle

4 Antworten

3

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()

vorgenommen werden

Versuchen Sie es mit diesem Code

%Vor%     
Penkey Suresh 19.05.2015, 10:40
quelle
2

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).

    
Kasik 16.05.2015 00:35
quelle
1

wenn myOffers = nil nicht abgeschlossen werden kann (Angebote). Also konnte HUD nicht aufhören. Sie können dies versuchen:

%Vor%     
Zhengjie 10.05.2015 13:21
quelle
1

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.

    
Jerry 20.05.2015 19:51
quelle

Tags und Links