2012-02-07 8 views
6

Sto utilizzando una sottoclasse di NSURLProtocol per intercettare tutte le chiamate HTTP e modificare l'agente utente e aggiungere altri header HTTP richiesti dal mio server.NSURL Avanzamento del protocollo e caricamento post

-(id)initWithRequest:(NSURLRequest *)request 
     cachedResponse:(NSCachedURLResponse *)cachedResponse 
       client:(id <NSURLProtocolClient>)client 
{ 
    NSMutableURLRequest* lInnerRequest; 
    //************************************************ 

    lInnerRequest = [request mutableCopy]; 
    [lInnerRequest setValue:@"MyUserAgent" forHTTPHeaderField:@"User-Agent"]; 

    //************************************************ 
    self = [super initWithRequest:lInnerRequest 
        cachedResponse:cachedResponse 
          client:client]; 
    //************************************************ 
    if (self) 
    { 
     self.innerRequest = lInnerRequest; 
    } 
    //***********************************00************* 
    [lInnerRequest release]; 
    //************************************************ 
    return self; 
} 

mio protocollo utilizza poi un NSURLConnection

- (void)startLoading 
{ 
self.URLConnection = [NSURLConnection connectionWithRequest:self.innerRequest delegate:self]; 
} 

ho quindi implementare tutto il metodo delegato nel NSURLConnection inoltrando la chiamata al metodo NSURLProtocolClient equivalente. Questo metodo funziona bene in generale, ma quando sto caricando i dati al server, il mio codice che sta usando NSURLConnection non viene richiamato il:

collegamento: didSendBodyData: totalBytesWritten: totalBytesExpectedToWrite:

capisco perché questo è poiché non ho implementato tale metodo nel protocollo NSURL poiché non esiste un metodo NSURLProtocolClient equivalente che possa essere utilizzato per segnalare il progresso del caricamento.

Qualcuno ha trovato qualche soluzione per questo?

+0

questo è un problema molto interessante. hai mai trovato un modo per farlo? – jasongregori

+0

Avere lo stesso problema con lo stesso identico caso d'uso. Qualcuno sa qualche soluzione alternativa? – nyi

risposta

0

aggiungere questa riga al tuo codice per renderlo una richiesta HTTP POST:

[lInnerRequest setHTTPMethod:@"POST"]; 
+0

Questo non funziona. in ogni caso 'lInnerRequest = [request mutableCopy];' dovrebbe aver copiato il metodo – terrinecold

-1

Usa setProperty:forKey:inRequest: per salvare NSURLConnection e oggetto delegato, quindi utilizzare propertyForKey:inRequest: per caricare NSURLConnection oggetto e delegare oggetto in costume NSURLProtocol di classe, quando dati inviati, utilizzare l'oggetto NSURLConnection e delegare per chiamare il metodo delegato