我正在尝试使用 ASIHTTPRequest 执行异步请求,但在请求完成时收到通知时遇到一些问题。
-(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 永远不会被调用。我在 ASIHTTPRequest.m 中遇到异常,-handleStreamCompleted:
if (fileError) {
[self failWithError:fileError];
} else {
[self requestFinished]; <----- this call fails
}
有什么线索吗?
最佳答案
你确定你的实现- (void)requestFinished:(ASIHTTPRequest *)request
的类在请求完成时仍然存在吗?在我看来,这个类(class)太早被释放了。请注意,delegate
属性不会保留其内容。
您可以将 [self retain]
添加到 doDownload
并将 [self release]
添加到 - (void)requestFinished: (ASIHTTPRequest *)request
,但要确保 (!) [self release]
不会被调用得太频繁。如果请求永远不会完成,这也可能是内存泄漏。最好在其他地方保留您的类(class)。
您也可以尝试将 NSZombieEnabled
设置为 YES
进行调试以查找错误。
关于iphone - ASIHTTPRequest,EXC_BAD_ACCESS 当请求完成时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2164948/