Sistema de carga de URL en Objective-C

La carga de URL es útil para acceder a la URL, es decir, los elementos de Internet. Se proporciona con la ayuda de las siguientes clases:

  • NSMutableURLRequest
  • NSURLConnection
  • NSURLCache
  • NSURLAuthenticationChallenge
  • NSURLCredential
  • NSURLProtectionSpace
  • NSURLResponse
  • NSURLDownload
  • NSURLSession

A continuación, se muestra un ejemplo sencillo de carga de URL. Esto no se puede ejecutar en la línea de comandos. Necesitamos crear la aplicación Cocoa.

Esto se puede hacer seleccionando Nuevo en XCode, luego Proyecto y seleccione Aplicación Cocoa en la sección de la aplicación OS X de la ventana que aparece.

Complete la secuencia de pasos haciendo clic en Siguiente y se le pedirá que proporcione un nombre de proyecto y podrá darle un nombre.

El archivo appdelegate.h será el siguiente:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;

@end

Actualice el archivo AppDelegate.m a lo siguiente:

#import "AppDelegate.h"

@interface SampleClass:NSObject<NSURLConnectionDelegate> {
   NSMutableData *_responseData;
}

- (void)initiateURLConnection;
@end

@implementation SampleClass
- (void)initiateURLConnection {
   
   // Create the request.
   NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://date.jsontest.com"]];

   // Create url connection and fire request
   NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
   [conn start];
}

#pragma mark NSURLConnection Delegate Methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
   // A response has been received, this is where we initialize the instance var you created
   // so that we can append data to it in the didReceiveData method
   // Furthermore, this method is called each time there is a redirect so reinitializing it
   // also serves to clear it
   _responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
   // Append the new data to the instance variable you declared
   [_responseData appendData:data];
}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
   willCacheResponse:(NSCachedURLResponse*)cachedResponse {
   // Return nil to indicate not necessary to store a cached response for this connection
   return nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
   // The request is complete and data has been received
   // You can parse the stuff in your instance variable now
   NSLog(@"%@",[[NSString alloc]initWithData:_responseData encoding:NSUTF8StringEncoding]);
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
   // The request has failed for some reason!
   // Check the error var
}
@end

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
   SampleClass *sampleClass = [[SampleClass alloc]init];
   [sampleClass initiateURLConnection];
   // Insert code here to initialize your application
}
@end

Ahora, cuando compilemos y ejecutemos el programa, obtendremos el siguiente resultado.

2013-09-29 16:50:31.953 NSURLConnectionSample[1444:303] {
   "time": "11:20:31 AM",
   "milliseconds_since_epoch": 1380453631948,
   "date": "09-29-2013"
}

En el programa anterior, hemos creado una conexión URL simple que toma el tiempo en formato JSON y muestra el tiempo.