I’m trying to do an asynchronous request with ASIHTTPRequest, but have some problem getting notified when the request is done.
-(void)doDownload{
NSURL *url = [NSURL URLWithString:@"http://www.someurl.com/?"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"someValue" forKey:@"someField"];
[request setRequestMethod:@"POST"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestFinished)];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];
}
requestFinished is never called. I get an exception in ASIHTTPRequest.m, -handleStreamCompleted:
if (fileError) {
[self failWithError:fileError];
} else {
[self requestFinished]; <----- this call fails
}
Any clues?
Are you sure that your class that implements
- (void)requestFinished:(ASIHTTPRequest *)requestis still there when the request finishes? It looks to me like the class gets deallocated too early. Note that thedelegateproperty does not retain its content.You could add a
[self retain]todoDownloadand a[self release]to- (void)requestFinished:(ASIHTTPRequest *)request, but make sure (!) that[self release]doesn’t get called too often. This is also a possible memory leak if a request would never finish. It would be best to retain your class somewhere else.You might also try to debug with
NSZombieEnabledset toYESto find the error.