140 likes | 265 Views
Praxisbeispiel Cocoa. Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller, SS 2012 Referent : Jan Moritz Kohl, 3 . April 2012. Wiederholung. MVC (Model-View-Controller)
E N D
Praxisbeispiel Cocoa Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller, SS 2012 Referent: Jan Moritz Kohl, 3. April 2012
Wiederholung • MVC (Model-View-Controller) • Daten - Oberfläche - Verknüpfung
Wiederholung • Hauptobjekt = NSApplication Keine Ableitung zur Erstellung individueller Klassen sondern Delegation (Zusätzliche Klassen) bzw. Erweiterung durch Kategorien • Bei Eingabe des Benutzers schickt NSApplication Nachricht an Delegate • Delegatekann jedes Objekt sein, welches Delegation Methoden implementiert
Klassen Implementierung @implementation MyClass- (void)windowDidMove:(NSNotification*)notification { // ... }@end Methode: windowDidMove / windowShouldClose
Instanz von MyClass MyClass *myDelegate = [[MyClass alloc] init];[window setDelegate: myDelegate];Unter NSWindow: if([[self delegate] respondsToSelector:@selector(windowDidMove:)]) { [[self delegate] windowDidMove:notification];}
Informelles Protokoll @interface NSObject(NSWindowNotifications)- (void)windowDidMove:(NSNotification *)notification;// ... other methods here@end • Häufig verwendet für Delegates
Formelles Protokoll @protocol NSWindowNotifications@optional- (void)windowDidMove:(NSNotification *)notification;// ... other methods here@end @interface MyDelegate < NSWindowNotifications >// ...@end
Observer @implementation MyObject// Sendet MyNotification Nachricht wenn aufgerufen- (void)notify { [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];}// Gibt Nachricht aus wenn MyNotification eingeht- (void)handleNotification:(NSNotification*)note { NSLog(@"Got notified: %@", note);}@endMyObject *object = [[MyObject alloc] init];// MyNotification events von allen Objekten erhalten[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil];// eine Notification erstellen[object notify];
Observer • Losere Form der Interaktion • Delegate ist fest an Objekt gebunden, Observer hat eher informativen Charakter • Registriereung bei NotificationCenter
Observer @implementation MyObject// Sendet MyNotification Nachricht wenn aufgerufen- (void)notify { [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];}// Gibt Nachricht aus wenn MyNotification eingeht- (void)handleNotification:(NSNotification*)note { NSLog(@"Got notified: %@", note);}@endMyObject *object = [[MyObject alloc] init];// MyNotification events von allen Objekten erhalten[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil];// eine Notification erstellen[object notify];
Observer @implementation MyObject// Sendet MyNotification Nachricht wenn aufgerufen- (void)notify { [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];}// Gibt Nachricht aus wenn MyNotification eingeht- (void)handleNotification:(NSNotification*)note { NSLog(@"Got notified: %@", note);}@endMyObject *object = [[MyObject alloc] init];// MyNotification events von allen Objekten erhalten[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil];// eine Notification erstellen[object notify];
Observer @implementation MyObject// Sendet MyNotification Nachricht wenn aufgerufen- (void)notify { [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];}// Gibt Nachricht aus wenn MyNotification eingeht- (void)handleNotification:(NSNotification*)note { NSLog(@"Got notified: %@", note);}@endMyObject *object = [[MyObject alloc] init];// MyNotification events von allen Objekten erhalten[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(handleNotification:) name:@"MyNotification" object:nil];// eine Notification erstellen[object notify];
Quellen • http://stackoverflow.com/questions/626898/how-do-i-create-delegates-in-objective-c • http://stackoverflow.com/questions/842737/cocoa-notification-example • https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html