如何发送异步URL请求?

Des*_*ond 21 iphone xcode nsurlconnection nsurlrequest ios

我想知道如何仅从URL请求异步获取返回值1或0 ....

目前我是这样做的:

NSString *UTCString = [NSString stringWithFormat:@"http://web.blah.net/question/CheckQuestions?utc=%0.f",[lastUTCDate timeIntervalSince1970]];
NSLog(@"UTC String %@",UTCString);
NSURL *updateDataURL = [NSURL URLWithString:UTCString];
NSString *checkValue = [NSString stringWithContentsOfURL:updateDataURL encoding:NSASCIIStringEncoding error:Nil];
NSLog(@"check Value %@",checkValue);
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是它阻止了我的主线程,直到我从URL得到回复,我该如何设置它以便它将在另一个线程而不是主线程中执行?

编辑:ANSWER 我最终用这个来调用我的功能,它运行良好:)

[self performSelectorInBackground:@selector(shouldCheckForUpdate) withObject:nil];
Run Code Online (Sandbox Code Playgroud)

Adi*_*mro 28

你可以使用NSURLConnection课程

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
Run Code Online (Sandbox Code Playgroud)

并使用其委托方法处理其响应和错误.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
Run Code Online (Sandbox Code Playgroud)

您可以找到NSURLConnection的实现

编辑:虽然NSURLConnection是苹果提供的更推荐的放置URL请求的方式.但我发现AFNetworking库非常节省时间,易于实现,并且作为第三方实现非常简单而且简单.你应该试一试.


Mau*_*lik 24

试试这个 :

.H:

NSMutableData *responseData;
Run Code Online (Sandbox Code Playgroud)

.M:

- (void)load 
{
  NSURL *myURL = [NSURL URLWithString:@"http://www.example.com"];
  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];

  [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{
  responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{
  [responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{
  [responseData release];
  [connection release];
  [textView setString:@"Unable to fetch data"];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
  NSLog(@"Succeeded! Received %d bytes of data",[responseData
                                                   length]);
  NSString *txt = [[[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding] autorelease];
}
Run Code Online (Sandbox Code Playgroud)


Sau*_*lia 5

使用NSURLConnection并提出您的要求.然后,您可以使用NSURLConnection的方法启动同步或异步连接:

同步加载数据

+ sendSynchronousRequest:returningResponse:error:
Run Code Online (Sandbox Code Playgroud)

异步加载数据

+ connectionWithRequest:delegate:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
– start
Run Code Online (Sandbox Code Playgroud)

NSURLConnection在Apple Developer API Reference中查看该类.