2012-03-29 11 views
0

Ich versuche, eine asynchornus Anfrage zu implementieren. Ich meine Forschung getan und das ist das Beste, was ich bekam, aber der Code ist voll von Fehlern, die ich die Lösung nichtCreat eine asynchrone Anfrage

NSURL *url2 = [NSURL URLWithString:@"www.google.com"]; 

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url2]; 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     if ([data length] > 0 && error == nil) 
      [delegate receivedData:data];//i get the error here use of undeclared identifier 'delegate' ,when I put self insead I receive the error : no visible @interface for "my class name" declares the selector "received data" 
     else if ([data length] == 0 && error == nil) 
      [delegate emptyReply];//same error here 
     else if (error != nil && error.code == ERROR_CODE_TIMEOUT) //the error here is "use of undelcared identifier ERROR_CODE_TIMEOUT 
      [delegate timedOut];//error here is save as the first one 
     else if (error != nil) 
      [delegate downloadError:error];//error here is save as the first one 
    }]; 

für finden habe ich NSURLConnectionDelegate in meiner .h-Datei hinzugefügt

kann mir jemand sagen, Was ist der Fehler?

Dank

+0

Können Sie bitte Ihre Ausgabe einfügen? –

Antwort

1

Ich habe nicht viel Erfahrung mit dieser Methode, aber dieses Beispiel funktioniert. Ich habe dies an meinen Server gesendet, um die Produktinformationen für einen In-App-Kauf zu testen. Sie könnten weitere else-ifs hinzufügen, um, wie Sie gepostet haben, verschiedene mögliche Ergebnisse zu testen, aber das sollte Ihnen den Anfang machen. Ich bin nicht sicher, warum dieser Stub, den Sie gepostet haben, Verweise auf einen Delegaten hat - der Punkt (oder einer der Punkte) von Block-Methoden ist in der Lage, diese Art von Dingen ohne einen Delegaten zu tun.

- (void)makeConnection { 
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:kServerPath] 
              cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
             timeoutInterval:5]; 
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
[NSURLConnection sendAsynchronousRequest:theRequest queue:queue completionHandler:^(NSURLResponse* theResponse, NSData* theData, NSError* error) { 
    NSLog(@"%@, %@ %@",theResponse.suggestedFilename,theResponse.MIMEType,theResponse.textEncodingName); 
    if (theData != nil && error == nil) { 
     NSArray *productArray = [NSJSONSerialization JSONObjectWithData:theData options:NSJSONReadingMutableContainers error:nil]; 
     NSLog(@"%@",productArray); 
    }else{ 
     NSLog(@"%@",error.localizedDescription); 
    } 
}]; 

}

0

Ich finde es einfacher ist, einfach zu tun - initWithRequest: Delegierten: und wie notwendig, um die Delegatmethoden implementieren. Sie werden

- (void)connection:(NSURLConnection *)theConnection didReceiveResponse:(NSURLResponse *)response 

und

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

zumindest wollen. Einen Code finden Sie unter http://developer.apple.com/library/ios/#samplecode/SimpleFTPSample/Listings/URLGetController_m.html. Beachten Sie, dass die empfangenen Daten für inkrementelle Blöcke aufgerufen wurden. Wahrscheinlich möchten Sie die Gesamtdaten in einer Eigenschaft nachverfolgen und Daten bei ihrer Ankunft anhängen. Abgesehen davon können Sie Fehlerbehandlung und Authentifizierung einwerfen, aber das sollte Ihnen den Einstieg erleichtern.

Verwandte Themen