2011-11-07 4 views
13

io mando un oggetto a questo Adrees: https://sandbox.itunes.apple.com/verifyReceiptLeggi NSURLresponse

con NSUrlconnection e sto cercando di leggere con questo metodo delegato:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response come questo:

NSlog(@"%@",response); i sto ottenendo questo codice:

<NSHTTPURLResponse: 0x7d2c6c0> ho bisogno di ottenere una stringa in qualche modo. come posso leggerlo?

risposta

18

Ho scritto questa risposta ad un'altra domanda, ma penso che ti aiuterà. Date un'occhiata in particolare ai metodi

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

e

-(void) connectionDidFinishLoading:(NSURLConnection *)connection


-(void) requestPage 
{ 
    NSString *urlString = @"http://the.page.you.want.com"; 
    NSURL *url = [NSURL URLWithString:urlString]; 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageAllowed timeoutInterval:20.0f]; 


    responseData = [[NSMutableData alloc] init]; 
    connection = [[NSURLConnection connectionWithRequest:request delegate:self] retain]; 
    delegate = target; 
} 


-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    if ([response isKindOfClass:[NSHTTPURLResponse class]]) 
    { 
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*) response; 
     //If you need the response, you can use it here 
    } 
} 

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [responseData appendData:data]; 
} 

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [responseData release]; 
    [connection release]; 
} 

-(void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    if (connection == adCheckConnection) 
    { 
     NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

     //You've got all the data now 
     //Do something with your response string 


     [responseString release]; 
    } 

    [responseData release]; 
    [connection release]; 
} 
+0

ma come indirizzare più richieste ?? per esempio quando una connessione sta succedendo e un'altra richiesta arriva prima della connessionedidfinishloading quindi è probabile che il responseData possa essere rilasciato a destra ?? – raghul

+0

@raghul Sì, è possibile. Per aggirare il problema, probabilmente lo racchiuderei in una classe "ConnectionHandler" in modo che ogni connessione abbia la propria istanza di 'responseData' –

6
NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *) response; 
int errorCode = httpResponse.statusCode; 
NSString *fileMIMEType = [[httpResponse MIMEType] lowercaseString]; 

Per ulteriori informazioni, consultare Documento iOS: NSHTTPURLResponse.

E avere pazienza: non tutti i collegamenti di ritorno NSHTTPURLResponse

+0

sto ottenendo 200 wich is ok ... ma come posso leggere server di mele risposta? –

+0

200 significa che la connessione è stata stabilita correttamente e che è possibile iniziare a ricevere i dati – Nekto

1

È possibile creare una sottoclasse e l'override del metodo - (NSString*) description.

3

Se si prevede che la connessione riceva alcuni dati che è possibile utilizzare.

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

si può poi semplicemente convertire i dati in NSString.