NSURLConnection的。我需要帮助保存收到的数据

时间:2011-09-22 13:00:19

标签: iphone objective-c nsurlconnection nsoperationqueue

我正在开始NSURLConnection,我需要保存从互联网收到的数据。 在- (void)connectionDidFinishLoading:(NSURLConnection *)connection中 我需要使用原始URL作为数据名称保存具有不同名称的数据... 如何使用异步请求在connectionDidFinishLoading中获取此信息(url)? 如果不可能可以建议我采取其他方式来做我问的问题? 谢谢 保罗

2 个答案:

答案 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 }