web-dev-qa-db-fra.com

iOS: quel est l'équivalent d'un écouteur d'événement dans Objective-C?

Dans certaines de mes connaissances, j'ai vu quelqu'un mentionner que dans votre contrôleur de vue, vous pouvez avoir un modèle et avoir une sorte d'auditeur sur le modèle pour y apporter des modifications. Je ne pense pas que j'utilise les bons noms pour ces noms, ce qui explique probablement pourquoi mes recherches n'ont rien révélé. En gros, je veux transférer les appels de mon serveur depuis les contrôleurs vers mes modèles, mais j'ai besoin d'une sorte d'écouteur pour savoir quand l'appel est terminé et mettre à jour mes vues.

18
Jhorra

regard sur les délégués tutoriel délégués

ou des blocs un peu plus avancés tutoriel de blocs de base

commencez simplement par les délégués, 

vous pouvez également utiliser NSNotification Tutoriel NSNotification mais n'est pas recommandé car il est diffusé à toutes les classes et vous n'aurez peut-être pas besoin d'envoyer des messages à une classe spécifique.

19
MaKo

Appartenant au monde C #, je dois aller à Objective C (pour mon travail). Je pense que l’événement équivalent dans l’objectif C est cette implémentation:

Créez un protocole avec toutes les méthodes de votre événement:

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

Dans votre classe qui doit envoyer l'événement, ajoutez:

@interface MyClassWichSendEvent : NSObject

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

@end

Relever l'événement où vous le souhaitez, par exemple:

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

Maintenant, dans votre classe d'auditeur, vous devriez écouter les événements comme ceci:

Ajoutez le protocole à votre classe qui écoute

@interface Document : NSDocument<MyDelegate>

Dans l'implémentation, sur init ou dans le générateur d'interface, vous devez lier le délégué de votre instance d'objet pour l'écouter avec le self de votre classe qui écoute.

Dans du code

-(void)awakeFromNib
{
    myObjToListen.delegate = self;    
}
  • Dans Interface Builder -> IBOutlet du délégué à votre classe d'écoute.

Et enfin, implémentez votre méthode dans votre classe d'auditeur:

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

Désolé pour mon anglais, j'espère que cela aidera les gens qui sont passés de Java ou C #.

12
csblo

Vous recherchez KVO - clé/valeur d'observation:

https://developer.Apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

http://nachbaur.com/2011/07/29/back-to-basics-using-kvo/

Les délégués + les notifications sont utiles pour la communication entre les objets, mais ils n'envoient pas automatiquement les msgs lorsqu'une valeur change (ce qui correspond à votre question, d'après votre question)

8
No Grabbing

Je pense que vous recherchez peut-être NSNotificationCenter, un moyen de transmettre des messages à quiconque peut écouter. Ainsi, vous pouvez envoyer une notification à partir d'un événement de votre modèle et l'écouter dans vos contrôleurs. Une méthode plus propre pourrait consister à implémenter votre propre protocole avec des délégués.

0
rooster117

Objective C utilise délégués

Cet article a un bel exemple: Comment créer des délégués dans Objective-C?

0
Joe