2017-06-25 5 views
-3
anfügen

Ich habe Dateien, die ich an ein Array anfügen, und ich mache es innerhalb eines Blocks, aber die Dateien werden nicht an das Array anhängen. Ich habe überprüft, ob die Dateien leer waren und sie waren nicht so, das ist nicht das Problem. Ich brauche wirklich Hilfe. Ich bin seit sechs Stunden festgefahren. ImageSource ist API für Bilddaten aus GitHub. Prost.Wie kann ich Datei an Array in Block

DispatchQueue.global(qos: .background).async { 
     () -> Void in 

     var files : [PFFile] = [] 
     var photos2: [ImageSource]? 
     for i in 0..<13 { 
       let indexpath = IndexPath(item: i, section: 0) 
       photos2?[indexpath.row].fullResolutionImageData(completion: { (Data) in 
        if let imageData = Data, let image = UIImage(data: imageData), let data = UIImageJPEGRepresentation(image, 1.0){ 
        let file = PFFile(data: data) 

          files.append(file!) 

        } 
       }) 
     } 
    } 
+0

Ist 'files.append (Datei !) 'Linie wird gerufen? – rmaddy

+0

genau lassen Sie mich überprüfen –

+0

ja, wenn ich einen Haltepunkt hinzufügen seine aufgerufene –

Antwort

0

Die Dateien sind an das Array angehängt wird - nämlich zu files. Aber files ist eine lokale Variable, so dass nach dem Block läuft, verschwindet es. Wenn Sie anderswo ein anderes Array haben oder wenn Sie versuchen, auf den Wert files außerhalb des asynchronen Blocks zuzugreifen, wird das fehlschlagen.

+0

wie kann ich es beheben. Bitte beraten, weil ich die Lösung nicht kenne –

+0

"Lösung" zu _was_? Ich weiß nicht, was du machen willst - weil du es mir nicht gesagt hast. Sie haben nur einen Ausschnitt Ihres Codes angezeigt, und keiner der in diesem Code enthaltenen Code ist in irgendeiner Weise problematisch. Alles verhält sich genau wie erwartet. Aus diesem Grund wird Ihre Frage abgelehnt. Es gibt kein Problem, also gibt es nichts, worüber man eine Frage stellen könnte. – matt

0

Es scheint, dass das Array „Photos2“ Null ist, so wird die Funktion „fullResolutionImageData (Fertigstellung :)“ tat nichts

+0

nein, ich habe vorher überprüft und festgestellt, dass die Daten in der Datei innerhalb der FullResolutionImageData -Funktion waren, aber außerhalb dieser Funktion war das Array Null. Unten, was Matt gesagt hat, ist richtig, aber ich weiß nicht, wie man es repariert. –

+0

Wenn das so ist, können Sie versuchen, die Definition von Array- "Dateien" außerhalb des Dispatch-Abschlusses zu verschieben, um den Lebenszyklus beizubehalten. – Loadar

0

Sie müssen außerhalb des Verschlusses Array erklären, so dass sie außerhalb des Geltungsbereichs der Schließung bestehen . An der Spitze des View-Controller eine Array-Eigenschaft (var files = []) erstellen und dann innerhalb des Verschlusses Anruf

self.files.append (was auch immer Sie sind Anfügen)

+0

was meinen Sie? Erklären Sie –

+0

Sprechen Sie außerhalb der Dispatch-Funktion –

Verwandte Themen