Estoy tratando de seguir ejemplos de otros, así como de Apple. Estoy perdido.Escribiendo mi propio método de bloqueo
Tengo una clase singleton que utilizo para manejar mi inicio de sesión de usuario (desafía un servidor web, etc.).
Quiero crear un bloque al que pueda llamar, paso el nombre de usuario/contraseña. El bloque realizará las llamadas al servicio web y luego regresará si fue exitoso o no.
Esto es lo que he arreglo para conseguir trabajo hasta el momento:
Mi clase Singleton se ve así:
.h
typedef void (^AMLoginBlock)(NSString *userName, NSString *password);
@interface AuthManager : NSObject
+ (id)sharedManager;
+ (bool)loginUserWithBlock:(AMLoginBlock)block;
@end
.m
@implementation AuthManager
+ (id)sharedManager
{
static dispatch_once_t pred = 0;
__strong static id _sharedObject = nil;
dispatch_once(&pred, ^{
_sharedObject = [[self alloc] init]; // or some other init method
});
return _sharedObject;
}
+ (bool)loginUserWithBlock:(AMLoginBlock)block {
NSLog(@"im printing from AM");
return true;
}
@end
I a continuación, llamar al método de esta manera:
bool rtn = [AuthManager loginUserWithBlock:^(NSString *userName, NSString *password) {
NSLog(@"im here in the block LVC.");
}];
Mi pregunta es tres partes:
¿Cómo escribo un controlador de finalización para el bloque similar a
UIView animation...
bloque.¿Es una buena idea realizar estas llamadas al servicio web desde una implementación basada en bloques?
¿Debo declarar el método de bloques de este modo:
- (bool)loginUserWithBlock:(AMLoginBlock)block;
en lugar de utilizar +(bool)loginUser..
ya que está en una clase singleton. No estoy seguro si esto causará que se creen varias instancias del singleton.
Mi objetivo es poder llamar a este bloque como usted llama al [UIView animation..]
. Por lo que simplemente puede hacer:
[AuthManager loginUserWithUsername:foo
password:bar1
completion:^(BOOL finished) {
if (finished)
//push new view controller.
else
//spit out error
}];