-
Notifications
You must be signed in to change notification settings - Fork 4
Mensagens
Todas as classes *ViewController trocam mensagens com as classes do pacote model.
Na maioria dos casos utilizamos a abordagem de passar a referência da classe e o método de callback a ser executado no final das operações assincronas. E na tela de LoginViewController utilizamos o recurso de notificação ( NSNotificationCenter);
Esta forma isola bem as camadas, pois é baseada no registro de listeners.
O exemplo de login esclarecerá o uso deste mecanismo.
Durante o evento viewDidLoad da classe LoginViewController o seguinte método foi invocado:
/* Registra todos os observadores desta classe */
-(void) configureTheListeners{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidLoggedIn:) name:EVENT_LOGIN_OK object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidLoggedWithError:) name:EVENT_LOGIN_FAIL object:nil];
}
Percebam que registri 2 observadores, um para o caso de sucesso no login e outro para o caso de falha. Agora sempre que alguma classe no projeto levantar uma notificação com um destes 2 eventos, esta classe será invocada para trata-los;
Vou colocar aqui o método userDidLoggedIn que precisa receber um parâmetro NSNotification:
- (void) userDidLoggedIn: (NSNotification *) notification{
NSLog(@"Usuario logado: %@", [(User *)notification.object email]);
RankingViewController *ranking = [[RankingViewController alloc] init];
[buttonLogin setEnabled:YES];
[self presentModalViewController:ranking animated:YES];
}
Vejam como eu pego o objeto dentro da notificação.
Então vamos ver como na classe User.m enviamos a notificação passando o objeto User como retorno.
-(void) didLoginWithXML: (NSString *) xml{
/*Trecho omitido para fins didaticos */
NSLog(@"Sending event: %@", EVENT_LOGIN_OK);
[[NSNotificationCenter defaultCenter] postNotificationName: EVENT_LOGIN_OK object:self];
}
O parametro foi informado como self, que é a instancia de User.