La mia domanda potrebbe sembrare molto scientifica, ma penso che sia un problema comune e gli sviluppatori e i programmatori esperti spero abbiano qualche consiglio per evitare il problema che cito nel titolo. Btw., Quello che descrivo qui sotto è un vero problema che sto cercando di risolvere proattivamente nel mio progetto iOS, voglio evitarlo a tutti i costi.
Per macchina a stati finiti intendo questo > Ho un'interfaccia utente con alcuni pulsanti, diversi stati di sessione rilevanti per quell'interfaccia utente e ciò che rappresenta questa UI, ho alcuni dati che i valori sono parzialmente visualizzati nell'interfaccia utente, ricevo e gestisco alcuni trigger esterni (rappresentati da callback dai sensori). Ho creato diagrammi di stato per mappare meglio gli scenari rilevanti che sono desiderabili e ineludibili in quella UI e applicazione. Mentre implemento lentamente il codice, l'app inizia a comportarsi sempre più come dovrebbe. Tuttavia, non sono molto fiducioso che sia abbastanza robusto. I miei dubbi derivano dall'osservare il mio modo di pensare e di implementare il processo. Ero sicuro che avessi tutto coperto, ma era sufficiente fare alcuni test brutali nell'interfaccia utente e ho subito capito che ci sono ancora lacune nel comportamento .. li ho patchati. Tuttavia, dal momento che ogni componente dipende e si comporta in base all'input di qualche altro componente, un determinato input da parte dell'utente o di una fonte esterna attiva una catena di eventi, cambiamenti di stato ... ecc. Ho diversi componenti e ognuno si comporta in questo modo Trigger ricevuto su input - > trigger e il suo mittente analizzati - > emettere qualcosa (un messaggio, un cambiamento di stato) basato sull'analisi
Il problema è che questo non è completamente autonomo e che i miei componenti (un elemento del database, uno stato di sessione, lo stato di un pulsante) ... potrebbero essere modificati, influenzati, cancellati o modificati in altro modo, al di fuori dell'ambito dell'evento -chain o scenario desiderabile. (il telefono si blocca, la batteria si spegne improvvisamente) Ciò introdurrà una situazione non valida nel sistema, da cui il sistema potenzialmente POTREBBE NON ESSERE IN GRADO di recuperare. Vedo questo (anche se la gente non si rende conto di questo è il problema) in molte delle mie app concorrenti che sono su Apple Store, i clienti scrivono cose come questa > "Ho aggiunto tre documenti e, dopo esserci andati li e là, non posso aprirli, anche se li vedo." oppure "Ho registrato video tutti i giorni, ma dopo aver registrato un video troppo log, non riesco a capovolgerli .., e il pulsante per i sottotitoli non funziona" ..
Questi sono solo esempi abbreviati, i clienti spesso lo descrivono in modo più dettagliato ... dalle descrizioni e dal comportamento descritto in essi, presumo che l'app in questione abbia una scomposizione FSM.
Quindi la domanda finale è: come posso evitare questo e come proteggere il sistema dal blocco stesso?
EDIT > Sto parlando nel contesto di una vista di viewcontroller sul telefono, intendo una parte dell'applicazione. Comprendo il pattern MVC, ho moduli separati per una funzionalità distinta. Tutto ciò che descrivo è pertinente per una tela sull'interfaccia utente.