Il proprietario del mio prodotto desidera che vengano segnalate ulteriori informazioni sullo stato del prodotto quando un utente contatta il servizio clienti tramite un modulo in-app. Il modulo alla fine si traduce in un'e-mail inviata a un elenco e-mail di un servizio clienti e gestita altrove.
La parte che sto cercando è come aumentare il mio progetto iOS esistente per consentire a qualche controller di raccogliere informazioni diagnostiche da una varietà di classi disparate, e farlo in un modo che sia minimamente invasivo e non causi mal di testa se refactoring più tardi.
Blocchi
Ho sperimentato alcune idee, tra cui un'interfaccia che consente a una classe arbitraria di registrare un blocco da eseguire quando si tenta di raccogliere le informazioni diagnostiche:
[DiagnosticCollectionController addBlockForDiagnosis:^(DiagnosticCollectionController *controller){
// Add some information here to the controller to send in the diagnostic report
}];
Notifiche
Un'altra idea che avevo in mente era che il controller diagnostico trasmettesse una notifica quando era pronta per iniziare a raccogliere informazioni, in modo che altri oggetti potessero collegare ciò di cui avevano bisogno. Il vantaggio (potenziale) qui è che posso evitare l'uso dei blocchi, evitando così di avere dei problemi di copia dei blocchi:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(someSelectorToHandleDiagnosticPopulation:)
name:DiagnosticCollectionControllerWillSendDiagnostics
object:someDiagnosticController];
// Elsewhere
- (void) someSelectorToHandleDiagnosticPopulation:(NSNotification *)note {
DiagnosticController *controller = [note object];
[controller addDiagnosticData:someDataDictionary];
}