¿Por qué mi aplicación no vuelve a mi vista detallada cuando se restaura?

Mi aplicación tiene una organización simple, que he configurado en un guión gráfico de Interface Builder (no en código). Hay un controlador de vista de navegación, que tiene su controlador de vista de raíz configurado en mi controlador de vista principal. Mi vista principal contiene una tabla, donde las celdas se desplazan a un controlador de vista detallada.

Cuando suspendo la aplicación mientras veo la Vista de detalles y luego la reanudo, vuelvo a la Vista principal, en lugar de a la Vista de detalles. ¿Por qué podría ser esto?

Detalles:

He configurado ID de restauración en Interface Builder para el controlador de vista de navegación, el controlador de vista principal y el controlador de vista de detalles. También he intentado agregar un ID de restauración a la vista de tabla y hacer que el controlador de vista principal implemente UIDataSourceModelAssociation.

Mi aplicación devuelve SÍ desde shouldRestoreApplicationState y tanto la Vista principal como la Vista detallada tienen métodos de codificación / decodificaciónRestorableEstado con codificador.

Estoy probando suspender / reanudar usando el simulador: ejecuto la aplicación, navego a la Vista de detalles, presiono el botón de inicio y luego hago clic en el botón de parada en XCode. Para reanudar, estoy ejecutando la aplicación de nuevo desde XCode.

Veo las siguientes llamadas en suspender:

AppDelegate shouldSaveApplicationState
MainViewController encodeRestorableStateWithCoder
DetailViewController encodeRestorableStateWithCoder

Y en resumen:

AppDelegate shouldRestoreApplicationState
AppDelegate viewControllerWithRestorationIdentifierPath Navigation
AppDelegate viewControllerWithRestorationIdentifierPath Navigation/MainView
MainViewController viewDidLoad
AppDelegate viewControllerWithRestorationIdentifierPath Navigation/DetailView
MainViewController decodeRestorableStateWithCoder

Además de que se restaura la vista incorrecta, hay algo más extraño: ¿Por qué la ruta del identificador de restauración para la Vista detallada "Navegación / Vista detallada" y no "Navegación / Vista principal / Vista detallada"? No existe una relación directa entre el controlador de la vista de navegación y el controlador de la vista de detalles. Su única conexión en Interface Builder es a través del segmento de la Vista principal.

¿He mal configurado algo?

He intentado asignar una clase de restauración a la vista de detalles. Cuando se invoca ese código de restauración, falla porque la UIStateRestorationViewControllerStoryboardKey no está configurada en el codificador.

Aquí hay una versión de juguete de mi proyecto que reproduce el problema:https://github.com/WanderingStar/RestorationTest

Intento esto con XCode versión 5.0 (5A1413) y iOS Simulator versión 7.0 (463.9.4), en caso de que sean relevantes.

Respuestas a la pregunta(2)

Su respuesta a la pregunta