您可以在这里提出一些不同的要求。我不知道它是哪一个。因此,我将尝试回答所有问题。
是不是你不知道requestFinished 什么时候被调用?你是这样设置请求的委托的吗?
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
如果你这样做了,那么你应该为上面提到的self 实现requestFinished: 方法。
您不确定如何在requestFinished: 中获取响应字符串?在这种情况下,解决方案很简单:
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];
// Use when fetching binary data
NSData *responseData = [request responseData];
}
即请求的 responseString 或 responseData 将为您提供所需的内容。
或者您是说您想以某种方式处理submitUserCredentials 中的响应(可能是因为此方法的局部变量中有很多上下文)?如果是这样,那么您最好的选择可能是使用blocks:
- (IBAction)grabURLInBackground:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setCompletionBlock:^{
// Use when fetching text data
NSString *responseString = [request responseString];
// Use when fetching binary data
NSData *responseData = [request responseData];
}];
[request setFailedBlock:^{
NSError *error = [request error];
}];
[request startAsynchronous];
}
或者问题是您希望 ASIHTTPRequest 以同步方式工作?在这种情况下,您可以这样做:
- (IBAction)grabURL:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
}
}
但不建议您这样做。这样做会挂起应用程序的主线程(假设您在主线程中进行调用),这不是一件好事。如果这确实是您正在寻找的答案,那么您可能需要阅读事件驱动编程。
注意:以上所有代码示例均复制自 ASIHTTPRequest 的优秀“How to use it”文档页面。