我正在开始NSURLConnection
,我需要保存从互联网收到的数据。
在- (void)connectionDidFinishLoading:(NSURLConnection *)connection
中
我需要使用原始URL作为数据名称保存具有不同名称的数据...
如何使用异步请求在connectionDidFinishLoading
中获取此信息(url)?
如果不可能可以建议我采取其他方式来做我问的问题?
谢谢
保罗
答案 0 :(得分:1)
* NOW ASIHTTPRequest库不再受作者支持,因此开始采用其他库*
我建议您使用ASIHTTP request。我已经使用了很长时间了。以下代码示例用于异步下载URL中的数据。
- (IBAction)grabURLInBackground:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];
// Use when fetching binary data
NSData *responseData = [request responseData];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
<强>更新强>
- (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];
//here you have access to NSURL variable url.
}];
[request setFailedBlock:^{
NSError *error = [request error];
}];
[request startAsynchronous];
}
尝试在ASIHTTP中使用GCD。在块中,您可以访问变量url
。
答案 1 :(得分:1)
**仅在iOS5之前回答有效。由于iOS5 Apple引入了-originalRequest方法,该方法允许为此特殊目的避免任何进一步的子类化。一般来说,Apple引入了NSURLConnection类的许多改进,除非需要非平凡的行为,否则不再需要子类化NSURLConnection ** 您可以通过添加名为
NSURL originalURL
的额外属性来继承NSURLConnection,然后启动它。执行委托完成方法后,您可以检索此属性并完成剩余的工作。 *
E.g。 (我会显示相关部分,请不要复制和粘贴):
MyURLConnection.h
@interface MyURLConnection:NSURLConnection { @property (nonatomic,retain) NSURL *originalURL; } @end
MyURLConnection.m
@implementation MyURLConnection @synthesize originalURL;
In your calling class:
MyURLConnection *myConnection = [[MyURLConnection alloc] initWithRequest:myRequest delegate:myDelegate]; myConnection.originalURL = [request URL]; [myConnection start];
and finally in the delegate:- (void)connectionDidFinishLoading:(NSURLConnection *)connection { MyURLConnection *myConn = (MyURLConnection)connection; NSURL *myURL = myConn.originalUrl; // following code }