Dienstag, Dezember 10, 2019

Wie die NSUrlConnection für das abrufen von Daten aus dem web?

In meiner Anwendung, die ich verwenden möchten, die NSURLConnection Klasse. Also bitte sagen Sie mir, wie ich diese benutzen? Diese enthalten viele delegate-Methoden, bitte sagen Sie mir, wie Sie zu nutzen?

2 Kommentare

  1. 12

    Initiieren Sie die Verbindung mit

    self.responseData = [NSMutableData data];
    NSURL *url = [NSURL URLWithString:@"http://sampleurl/"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connection autorelease];

    und Sie können fangen die Antwort in der connectionDidFinishLoading delegate-Methode

    #pragma mark - NSURLConnection Delegate Methods
    
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        [self.responseData setLength:0];
    }
    
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        [self.responseData appendData:data];
    }
    
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
        NSLog(@"Connection failed: %@", [error description]);
    }
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
            //Getting your response string
        NSString *responseString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
    self.responseData = nil;
        }

    Für Ihre memory leak problem

    Deklarieren Sie die response-Daten in der interface-Datei

    NSMutableData *_responseData;

    Eigenschaft, wie unten

    @property (nonatomic, retain) NSMutableData *responseData;

    und synthetisieren es

    @synthesize responseData = _responseData;

    Dont release es überall (Wir haben bequeme Konstruktoren für die Zuweisung). Wir haben bereits es zu null in connectionDidFinishLoading Methode.

    • so lösen Sie die responsedata
    • setzen Sie ihn auf null im connectionDidFinishLoading ( selbst.responseData = null; )und lassen Sie die ivar in der dealloc-Methode hinzu. ( [responseData release]; )
    • Ich habe die 100% memory leak problem bei sich selbst.responseData=[NSMutableData Daten];
    • Aktualisiert meine Antwort
    • Gleiche problem war, kam
    • Dieser code sollte in Ordnung sein. Haben Sie veröffentlicht die responseString nach der Benutzung. Ich habe Sie nicht veröffentlicht, es in den code. Kann sein, Sie haben das Leck in der Antwort-string.
    • ya ich veröffentlicht, dass man

  2. 5

    In iOS 5 und OS X 10.7 oder höher Sie können das laden der Daten asynchron mit dem folgenden:

    NSURL *url = [NSURL URLWithString:@"http://sampleurl/"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue]
           completionHandler: ^(NSURLResponse * response, NSData * data, NSError * error) {
               NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse*)response;
               if(httpResponse.statusCode == 200) {
                   //your code to handle the data
               }
           }
    ];

    Oder wenn Sie wollen, um es synchron (nicht empfohlen, wenn Sie sind das laden von großen Daten wie hängt die Anwendung) (verfügbar in Mac OS X 10.2+ und iOS 2.0+)

    NSURL *url = [NSURL URLWithString:@"http://sampleurl/"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSURLResponse * response;
    NSError * error;
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    • Eine nette einfache Antwort, die alles Tat, was ich wollte. Danke!

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...