2013-03-19 9 views
6

Ho uno scenario in cui Obj A invia un messaggio delegato a Obj B dicendo di premere un pulsante. Obj B esegue alcune azioni in base alla chiamata del delegato.È necessario che un messaggio delegato sia sempre vuoto come tipo di reso?

Obj A vuole mostrare qualcosa sullo schermo in base al risultato di ciò che è accaduto dopo che il messaggio delegato è stato chiamato.

Dì Obj B mantiene un contatore, di quante volte l'azione ha avuto luogo.

Quindi quando Obj A preme i pulsanti e chiama il metodo delegate, è una buona idea che il metodo delegato restituisca un valore, nel mio caso il contatore corrente?

in modo che Obj A possa visualizzare il valore del contatore aggiornato.

In questo caso lo stesso messaggio funge sia da Delegato che da DataSource.

Per me Obj A è una vista e Obj B è Visualizza controller.

La mia implementazione è difettosa?

+1

Un delegato non è assolutamente niente di speciale. È solo una classe/istanza/metodo che contiene alcune funzioni a cui vuoi accedere. Ad esempio, puoi visualizzare il file system della casella come un insieme di delegati: li chiami e loro eseguono un servizio. –

risposta

5

Mi piace la tua implementazione.

Anche se non distingue tra il delegato ei ruoli dell'origine dati, li combina in un modo più semplice.

Credo che il modo opportuno attuare quanto concetti MVC è:

  • A (la vista) invia B (il delegato) un messaggio che dice "Mi è stato sfruttato" o qualcosa di simile.

  • B (il delegato) si comporta come necessario e invia ad A un messaggio che recita "reloadData".

  • A chiede B (come origine dati ora) per i dati da visualizzare.

perché nel suo caso il delegato e l'origine dati sono lo stesso oggetto, come accade in molti altri casi, mi sembra molto plausibile e per niente viziata per l'attuazione del flusso, come avete fatto:

  • A (la vista) invia un messaggio B (il delegato &) e riceve le informazioni necessarie per aggiornare la visualizzazione.
3

no e in molti casi non restituisce nulla ma un valore.

questo è un approccio valido e comunemente usato .. un esempio è delegato del UITextView:

ma molti altri componenti fare questo in modo che non c'è bisogno di essere troppo specializzato ma in modo che possano rimangono generici

2

No, non è una regola, che un delgate deve restituire il nulla.

Ci sono molti delegates che restituiscono valori non nulli.

- (BOOL)application:(NSApplication *)sender 
    openFile:(NSString *)filename;      // NSApplication 
- (BOOL)application:(UIApplication *)application 
    handleOpenURL:(NSURL *)url;       // UIApplicationDelegate 
- (UITableRowIndexSet *)tableView:(NSTableView *)tableView 
    willSelectRows:(UITableRowIndexSet *)selection;  // UITableViewDelegate 
- (NSRect)windowWillUseStandardFrame:(NSWindow *)window 
    defaultFrame:(NSRect)newFrame;      // NSWindow 
Problemi correlati