Completion Handler funktioniert nicht in viewDidLoad?

9

Ich verwende diese Bibliothek in meiner App für Banner. Ich versuche, den Link zu erhalten, indem ich den JSON analysiere.

Die Bilder werden in der slideshow -Ansicht nicht angezeigt. Wenn ich die slideshow -Ansicht drücke, funktioniert alles gut. Ich dachte, dass es ein Problem mit meinem Complete-Handler gäbe. Aber ich kann es noch nicht lösen:)

%Vor%     
user3467240 13.02.2016, 18:16
quelle

6 Antworten

4

Sie haben wahrscheinlich ein Threading-Problem. Es gibt keine Garantie, dass der Banner-Beendigungshandler für den Hauptthread aufgerufen wird. Sie müssen explizit zum Hauptthread wechseln, bevor Sie irgendetwas tun, das Ihre Eigenschaften oder (besonders) die Schnittstelle berührt.

    
matt 13.02.2016 18:21
quelle
0

Ich denke, Ihr Problem könnte sein, dass Sie erwarten, dass die Bilder sofort verfügbar sind, aber sie müssen vorher heruntergeladen werden, damit sie nicht sofort verfügbar sind, nachdem Ihre viewDidLoad -Methode beendet wurde. Deshalb sollten Sie Ihre Diashow wahrscheinlich in der viewDidLoad und nicht in Ihrer bannershow() -Methode konfigurieren. So etwas könnte eine Verbesserung sein:

%Vor%     
fdiaz 21.02.2016 05:31
quelle
0

Verschieben Sie den Code nach viewWillAppear .

%Vor%     
TechBee 23.02.2016 06:31
quelle
0
%Vor%

}

Sie führen eine Schleife in Banners fun aus     für den Index in 0 ... count-1 {                         let Bild: String = json ["image_path"] [index] .stringValue                         lass quelle: AlamofireSource = AlamofireSource (urlString: image)!                         self.Banner.append (Quelle)                     }   Ersetzen Sie diesen Code in einer anderen Methode und platzieren Sie ein optionales
    var Bild: String? = json ["image_path"] [index] .stringValue

oder legen Sie ein Daumenbild, damit Sie bestätigen, dass das Bild erfolgreich heruntergeladen wurde oder nicht.

Lass es mich wissen, wenn es funktioniert

Danke, Happy Coding

    
Viru1987 23.02.2016 07:03
quelle
0

Vielleicht siehst du keine Bilder, weil du sie in einem sekundären Thread aktualisierst, du musst eine Bildaktualisierung im Hauptthread durchführen; In swift (performSelectorOnMainThread () ist nicht verfügbar) können Sie etwas wie folgt verwenden:

%Vor%     
atrebbi 23.02.2016 16:08
quelle
-1

Nicht wirklich sicher, aber ich nehme an, dass, da Ihre Bilder heruntergeladen werden müssen, sie null sind, wenn Sie self.slideshow.setImageInputs(self.Banner) aufrufen, wodurch das Bild intern aus der Liste in eine Bildansicht gesetzt wird, die in der scrollView hinzugefügt wird. Eine Möglichkeit, an die ich denken kann, ist die Verwendung von SDWebImage , um das Bild auf imageView zu setzen, so dass es die jeweiligen imageViews aktualisiert, sobald das Bild angezeigt wird bereit (heruntergeladen). Ich denke, Sie müssen es in der Klasse InputSource.swift in der Methode setToImageView(_:) verwenden. Sie müssen dies jedoch überprüfen, das ist das einzige mögliche Problem, das ich denken könnte, das Ihr Problem verursachen könnte.

    
uchiha 17.02.2016 13:51
quelle