Since this is just an example to show how someone would use GKStateMachine for Non-Game Apps it delivers the point, but I don’t think someone should slam it on the coordinator pattern since the GKStateMachine approach is the coordinator pattern itself.
Its a bit confusing since the coordinators in this case actually just encapsulate a few properties and trigger the navigation; a task that could be done by the state itself. I’m ok with encapsulating but having a State Machine (i. e. a coordinator with transition validation) and coordinators (without validation) is a bit redundant and confusing for new people coming to the project.
I think GKStateMachine is a very powerful coordinator and very much under-utilised. Unfortunately
This tutorial looks promising, but too bad, after adding state machine, it doesn’t work properly after clicking back button on the navigation bar. It doesn’t handle popping on navigation controller.
For example, opening the app, click on a kanji, then click back button on navigation bar. Now you got stuck on that state.
NavigationController has its own state. How would you sync it with KanjiStateMachine?