UIViewController llamadas de ciclo de vida en combinación con restauración de estado

Estoy tratando de implementar la restauración de estado en una aplicación que utiliza iOS 6+ y guiones gráficos, pero tengo problemas para encontrar una manera de evitar llamadas duplicadas a métodos pesados.

Si simplemente inicio la aplicación, necesito configurar la interfaz de usuario enviewDidLoad:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupUI];
}

Esto funciona bien en un mundo normal, sin restauración de estado. Ahora he agregado la restauración de estado y, después de restaurar algunas propiedades, necesito actualizar la interfaz de usuario con esas propiedades:

- (void)decodeRestorableStateWithCoder:(NSCoder *)coder {
    [super decodeRestorableStateWithCoder:coder];
    // restore properties and stuff
    // [...]
    [self setupUI];
}

Entonces, ¿qué pasa ahora es que primero elsetupUI método se llama desdeviewDidLoad, y luego otra vez desdedecodeRestorableStateWithCoder:. No veo un método que pueda anular y que siempre se llame último.

Este es el orden normal de las llamadas de método:

awakeFromNibviewDidLoadVer ApareceráviewDidAppear

Cuando se utiliza la restauración de estado, esto se llama:

awakeFromNibviewDidLoaddecodeRestorableStateWithCoderVer ApareceráviewDidAppear

No puedo hacer la llamada asetupUI enviewWillAppear porque entonces también se ejecutaría cada vez que vuelvas nativo a una vista.

Sería mucho más práctico sidecodeRestorableStateWithCoder se llamaba antesviewDidLoad porque entonces podrías usar propiedades restauradas. Lamentablemente ese no es el caso, así que ... ¿cómo puedo evitar hacer el trabajo enviewDidLoad cuando sé que tengo que hacerlo todo de nuevo endecodeRestorableStateWithCoder ¿justo después de?

Respuestas a la pregunta(8)

Su respuesta a la pregunta