'for' Schleife stürzt beim Herunterladen von NSMutableArray ab

8

Ich habe 4 Elemente in meinem NSMutableArray . Ich habe diesen netten Code zum Herunterladen von Dateien und Anzeigen der Dateidaten in UITextView zu Testzwecken. Ohne die for -Schleife ist alles in Ordnung. Der Code, der mir das Problem gibt, ist in dieser Funktion:

%Vor%

Ich dachte zuerst, dass das Problem in isBusy BOOL sein könnte, aber selbst ohne die Bedingung if stürzt die App ab. Der Compiler gibt mir keinen Fehler, aber dieser: Hier ist der Link für den großen Screenshot .

Der Rest der Funktionen sind wie folgt:

%Vor%

Alle NSLogged Werte sind mehr als gut, das Array hat Links und alle Links sind korrekt.

    
Sergey Grischyov 19.12.2012, 14:28
quelle

4 Antworten

6

Ich vermute, dass irgendwann downloadArray[i] irgendwann kaputt ist, oder es ist kein NSUrl. Der Code stürzt in CFURLCopyAbsoluteURL() ab, aufgerufen von [NSURLRequest requestWithURL...] .

    
Krzysiek 19.12.2012, 15:05
quelle
1

Sie nehmen die asynchrone API initWithRequest: Delegate: und versuchen Sie, es synchron zu machen, indem Sie das Flag isBusy verwenden. Dieser Ansatz ist sehr falsch, da die NSURLConnection-Klasse intelligent genug ist und keine willkürlichen Flags verwenden muss, wenn Sie sie richtig verwenden. Sie sollten ernsthaft über die Verwendung von NSOperationen oder GCD nachdenken. Wenn Sie eine komplexere Konnektivitätsprogrammierung planen, sollten Sie vielleicht ein Drittanbieter-Framework wie RestKit in Betracht ziehen.

    
lawicko 19.12.2012 15:13
quelle
1

Ich denke, es ist ein Problem mit URL-Objekt in [NSURLRequest requestWithURL: url Es ist nicht notwendig, die URL in ein zusätzliches Objekt zu kopieren. Versuchen Sie Folgendes:

%Vor%

(oder fügen Sie selbst hinzu. vor DownloadURL)

Wenn Ihr DownloadArray NSStrings enthält:

%Vor%

Ich würde empfehlen, ein externes Framework wie [ASIHTTPRequest] (http://allseeing-i.com/ASIHTTPRequest/

) zu verwenden     
flexo 19.12.2012 15:24
quelle
1

Entfernen Sie die for-Schleife und den isBusy-Indikator. In complexDownload verarbeitet immer nur das erste oder das letzte (was auch immer passender ist) Objekt und entfernt es dann aus dem Array. In connectionDidFinish invoke complexDownload erneut. Benutze performSelector dafür. Die Wartezeit kann sogar 0,0f betragen. Auf diese Weise würde Ihre downloadArray als eine Art Warteschlange fungieren.

    
Hermann Klecker 19.12.2012 15:23
quelle