2012-05-08 20 views
17

En algunos de mis aprendizajes vi a alguien mencionar que en su controlador de vista puede tener un modelo y tener algún tipo de oyente en el modelo para los cambios en él. No creo que esté usando los nombres correctos para estos, que es probablemente la razón por la cual mis búsquedas no han encontrado nada. Básicamente, quiero mover mis llamadas de servidor de los controladores a mis modelos, pero necesito algún tipo de oyente para saber cuándo se completa la llamada para actualizar mis vistas.iOS: ¿qué es el equivalente a un detector de eventos en Objective-C?

+0

Eche un vistazo a [este documento] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html) de Apple. – dasblinkenlight

Respuesta

19

a ver en delegados delegates tutorial

o bloquea un poco más avanzados basic blocks tutorial

acaba de comenzar con los delegados,

también se puede utilizar NSNotification NSNotification tutorial pero no se recomienda ya que transmite a todas las clases , y es posible que solo necesite enviar mensajes a una clase específica no todos

+1

Creo que lo que leí fue sobre NSNotification, la razón por la que me estaba inclinando hacia eso es porque quiero que el Modelo no se dé cuenta o no se preocupe por lo que estaba escuchando. Cuando implementé delegados en otros lugares, necesitaba saber sobre el delegado para poder llamar a un método específico. En este caso, quiero modelar para simplemente transmitir que terminó, por lo que la vista que esté escuchando puede actuar de la forma que sea apropiada para esa vista específica. – Jhorra

+0

primer enlace roto –

+0

@IspasClaudiu actualizado gracias – MaKo

0

Creo Es posible que esté buscando NSNotificationCenter, que es una forma de pasar mensajes a quien quiera que esté escuchando. Entonces puede enviar una notificación de un evento en su modelo y solo escucharlo en sus controladores. Un método más limpio podría ser implementar su propio protocolo con delegados.

12

Pertenezco al mundo C#, tengo que ir al objetivo c (para mi trabajo). Creo que el equivalente evento en c objetivo es esta implementación:

Crear protocolo con todos los métodos de su evento:

@protocol MyDelegate <NSObject> 
    - (void)myEvent; 
@end 

en su clase que debe enviar el evento, agrego:

@interface MyClassWichSendEvent : NSObject 

@property (nonatomic, retain) IBOutlet id<MyDelegate> delegate; 

@end 

Levantando el evento donde desee, por ejemplo:

- (IBAction)testEvent:(NSButton*)sender 
{ 
    [self.delegate myEvent]; 
} 

En su clase de escucha, debe escuchar los eventos de esta manera:

agregar el protocolo a su clase que escuchar

@interface Document : NSDocument<MyDelegate> 

En la aplicación, a init o constructor de interfaces, debe vincular delegado de su instancia de objeto para escuchar con uno mismo de su clase que escucha.

En el código

-(void)awakeFromNib 
{ 
    myObjToListen.delegate = self;  
} 
  • En Interface Builder -> IBOutlet del delegado a su clase de escucha.

Y, por último, poner en práctica su método en su clase de escucha:

- (void)myEvent 
{ 
    NSLog(@"i have listen this event !"); 
} 

Lo siento por mi Inglés, espero que ayudan a las personas que iban de Java o C#.

+0

Lo que no entiendo cómo se llama myEvent en una identificación? Porque lo que veo es que el delegado es un ID de IBOutlet . ¿Puedes explicar un poco en detalles? Gracias –

Cuestiones relacionadas