2009-06-21 3 views
0

Ich versuche, Daten von einer .php-Datei auf einem Server aus einer iPhone OS-App abzurufen. In einem Verfahren, verwende ich den folgenden Code:Beendet App WAIT für -initWithContentsOfURL: um Web-Daten abzurufen?

NSString *aString = [[NSString alloc] initWithContentsOfURL:aURL encoding:anEncoding error:nil]; 

//See what I got 
NSLog(aString); 

Wenn ich die App es wie die App scheint laufen läuft durch den Code so schnell, dass ich bezweifle, dass es genügend Zeit für eine Datenanforderung war durchgesickert zu haben. Die resultierende Saite ist völlig leer, was meinen Verdacht weiter stützt. Was passiert hier? Wartet die App nicht darauf, dass die -initWithContentsOfURL Daten von der .php-Datei auf meinem Server abruft? Wenn die App nicht auf diese Methode wartet, gibt es eine andere Methode, die ich verwenden kann, um eine Datenanforderung so auszuführen, dass WAITS für die Anforderung abgeschlossen ist, bevor Sie zum nächsten Code übergehen?

(ich habe auch ein wenig auf NSURLConnection lesen - das ist vielleicht das, was ich stattdessen suche in der -initWithContentsOfURL werden soll)

+0

Der Methodenaufruf sollte warten, während die Daten abgerufen werden, bevor sie zur nächsten Anweisung springt. Haben Sie versucht, die URL von einem Browser aus aufzurufen und zu sehen, welche Daten Sie erhalten? Ist der Inhaltstyp in den Kopfzeileninformationen Ihrer Antwort korrekt? Vielleicht solltest du es stattdessen in einem NSData versuchen und die Zeichenfolge aus den NSData holen? – lostInTransit

Antwort

3

NSURLConnection ist für immer eine Datei aus dem Internet ... Es spielt keine ‚t‚warten‘an sich, sondern seine Delegierten Rückrufe:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

... können Sie benachrichtigt werden, wenn Daten empfangen worden sind, und wenn die Daten vollständig heruntergeladen wurde. Auf diese Weise können Sie die App (wenn Sie möchten) eine UIProgressBar anzeigen lassen, sobald die Daten eintreffen, und dann die Datei wie gewünscht verarbeiten, wenn sie vollständig empfangen wurde.

+4

Diese Methoden werden nur bei einem Aufruf mit NSURLConnection und nur bei asynchronen Aufrufen aufgerufen. InitWithContentsOfURL: führt einen synchronen Aufruf durch – lostInTransit

Verwandte Themen