How to send Asynchronous URL Request?

后端 未结 5 1990
孤独总比滥情好
孤独总比滥情好 2020-11-27 17:30

I would like to know how do I get a return value 1 or 0 only.... back from an URL request asynchronously.

currently I do it in this way:

NSString *UT         


        
相关标签:
5条回答
  • 2020-11-27 17:34

    you can use NSURLConnection class

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
    

    and handle its response and errors using its delegate methods.

    - (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 
    

    You can find implementation of NSURLConnection

    • Apple docs: Using NSURLConnection
    • How To Use iOS NSURLConnection By Example

    Edit: Although NSURLConnection is provided by apple is more recommended way of placing URL request. But I found AFNetworking library very time saving, easy to implement and robust yet simple as third party implementation. You should give it a try.

    0 讨论(0)
  • 2020-11-27 17:34

    Shamelessly copy from https://gist.github.com/knmshk/3027474. All credits go to https://gist.github.com/knmshk.

    xmlData = [[NSMutableData alloc] init];
    NSURL *url = [NSURL URLWithString:
    @"http://forrums.bignerdranch.com/smartfeed.php?"
    @"limit=NO_LIMIT&count_limit20&sort_by=standard&"
    @"feed_type=RSS2.0&feed_style=COMPACT"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:queue
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
                               if (error) {
                                   xmlData = nil;
                                   NSLog(@"error:%@", error.localizedDescription);
                               }
                               [xmlData appendData:data];
                           }];
    
    0 讨论(0)
  • 2020-11-27 17:41

    There is an example in the iOS XCode documentation called LazyTableImages. This does an asynchronous URL as well as asynchronous image load into UITableView cells displayed on the screen after scrolling stops. Excellent example of protocols, asynchronous data handling, etc.

    0 讨论(0)
  • 2020-11-27 17:44

    try this :

    .h:

    NSMutableData *responseData;
    

    .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];
    }
    
    0 讨论(0)
  • 2020-11-27 17:46

    Use NSURLConnection and make your request. Then you may start synchronous or asynchronous connection with NSURLConnection's methods :

    Loading Data Synchronously

    + sendSynchronousRequest:returningResponse:error:
    

    Loading Data Asynchronously

    + connectionWithRequest:delegate:
    – initWithRequest:delegate:
    – initWithRequest:delegate:startImmediately:
    – start
    

    Check the NSURLConnection class in Apple Developer API Reference.

    0 讨论(0)
提交回复
热议问题