Mittwoch, Januar 29, 2020

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