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");