Notificaciones locales

Mostrar notificación local

- (void) mostrarNotificacionLocal
{
	UILocalNotification *notification = [[UILocalNotification alloc] init];
	notification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
	notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
	notification.alertBody = @"Mensaje a mostrar";
	notification.timeZone = [NSTimeZone defaultTimeZone];
	
	[[UIApplication sharedApplication] scheduleLocalNotification:notification];

}

En AppDelegate.m en el método didFinishLaunchingWithOptions ponemos

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotification) {
        application.applicationIconBadgeNumber = 0;
    }
    
    return YES;
}

Y en el método didReceiveLocalNotification añadimos

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    application.applicationIconBadgeNumber = 0;
}

Obtener JSON asíncrono con intervalo mediante GET

NSURL *url = [NSURL URLWithString:@"URL?campo1=valor1"];
	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
	[request setTimeoutInterval: 10.0]; // Si en 10 segundos no se recibe respuesta del servidor continuamos utilizando la aplicación
	[NSURLConnection sendAsynchronousRequest:request
									   queue:[NSOperationQueue currentQueue]
						   completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
							   
							   int comprobarJson = 0;
							   
							   if (data != nil && error == nil)
							   {
								   
								   NSDictionary* json = [NSJSONSerialization
														 JSONObjectWithData:data
														 options:kNilOptions
														 error:&error];
								   
								   comprobarJson = [[json objectForKey:@"success"] integerValue];
								   
								   if ( comprobarJson == 1 ) {
									   
									   //Tratar el resultado
									   
								   }
								   
							   } else {
								   
								   //Hubo algún error
								   comprobarJson = 0;
								   NSLog(@"La petición excede del tiempo que pusimos");
								   
							   }
							   
						   }];

Añadir enlaces en un UITextView

 NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"Google"];
 [str addAttribute: NSLinkAttributeName value: @"http://www.google.com" range: NSMakeRange(0, str.length)];
 tuTextView.attributedText = str;

Pulsar sobre una foto

-(void) pulsarSobreFoto {
	
	UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pulsarFoto:)];
	
	singleTap.numberOfTapsRequired = 1;
	singleTap.numberOfTouchesRequired = 1;
	
	[imagen addGestureRecognizer:singleTap];
	[imagen setUserInteractionEnabled:YES];
	
}

-(void)pulsarFoto:(UIGestureRecognizer *)gestureRecognizer{
	
	NSLog(@"Pulsar sobre foto");
	
}

Dispatch en segundo plano

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
		
		//Segundo plano
		
		dispatch_async(dispatch_get_main_queue(), ^{
			
			//Lo ejecuta cuando acaban las operaciones hechas en segundo plano
			
		});
	});

Obtener JSON asíncrono con intervalo mediante POST

Obtenemos los datos de un JSON de manera asíncrona y si no tenemos respuesta del servidor en 10 segundos continuamos.

NSString *makeURL = @"direccionURL";
	NSURL *url = [NSURL URLWithString:makeURL];
	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
	[request setTimeoutInterval: 10.0]; // Si en 10 segundos no se recibe respuesta del servidor continuamos utilizando la aplicación
	[request setHTTPMethod:@"POST"];
	
	NSArray *campos = [NSArray arrayWithObjects:@"campo1",@"campo2",@"campo3", nil];
	NSArray *valores = [NSArray arrayWithObjects:@"valor1",@"valor2",@"valor3", nil];
	NSDictionary *diccionario = [NSDictionary dictionaryWithObjects:valores forKeys:campos];
	
	NSMutableArray * content = [NSMutableArray array];
	for( NSString * key in diccionario)
		[content addObject: [NSString stringWithFormat: @"%@=%@", key, diccionario[key]]];
	
	NSString * body = [content componentsJoinedByString: @"&"];
	NSData * bodyData = [body dataUsingEncoding: NSUTF8StringEncoding];
	NSString * msgLength = [NSString stringWithFormat: @"%ld", (unsigned long)[bodyData length]];
	
	[request addValue: @"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField: @"Content-Type"];
	[request addValue: msgLength forHTTPHeaderField: @"Content-Length"];
	[request setHTTPBody: bodyData];
	
	[NSURLConnection sendAsynchronousRequest:request
									   queue:[NSOperationQueue currentQueue]
						   completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
							   
							   int comprobarJson =  0;
							   
							   if (data != nil && error == nil)
							   {
								   
								   NSDictionary* json = [NSJSONSerialization
														 JSONObjectWithData:data
														 options:kNilOptions
														 error:&error];
								   
								   comprobarJson = [[json objectForKey:@"success"] integerValue];
								   
								   if (comprobarJson == 1) {
									   
									  //Tratar el resultado
									  
								   }
								   
							   }
							   else
							   {
								   //Hubo algún error
								   comprobarJson = 0;
								   NSLog(@"La petición excede del tiempo que pusimos");
								   
							   }
							   
						   }];
	
	

Comprobar la vista anterior

Comprobamos cual es la vista anterior

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[[self navigationController] viewControllers]];
	UIViewController *vistaAnterior = [viewControllers objectAtIndex:[viewControllers count] -2];
	if ([vistaAnterior isKindOfClass:[NombreDeLaClaseAnteriorAComprobar class]])
		NSLog(@"Vista anterior");