Перезагрузите раскадровку, чтобы изменить локаль

Я использую одну локализованную раскадровку для своего приложения. В приложении должна быть возможность менять язык на лету. До сих пор я выяснил, как изменить язык, который используется во время запуска приложения:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize]; //to make the change immediate

И мне удалось перезагрузить все мое приложение, удалив все подпредставления ключевого окна, перезагрузив начальный контроллер представления из раскадровки и сделав его новым корневым контроллером представления. (У него есть некоторые проблемы, например, управление открытыми ресурсами, но это можно сделать.)

Единственное, что я не мог понять, это как заставить iOS перезагрузить раскадровку на новом языке? Кажется, раскадровки как-то кешируются, и-UIStoryboad:stroyboardWithName:fromNib не перезагружает его полностью, поэтому он отображается на последнем языке.

Я уже рассмотрел два других варианта:

наличие разных файлов раскадровки для каждого языка (это невозможно, я не хочу этого делать)

использование прослушивателей событий во всех моих контроллерах представления, которые реагируют на изменение языка и устанавливают новые строки в пользовательском интерфейсе (который также должен вызываться каждый раз, когда создается любой элемент интерфейса из раскадровки). Это решение требует больше времени, чем мы хотели бы потратить на это, а также значительно увеличивает вероятность ошибок.

Есть ли какой-нибудь более умный способ? Я не хочу сохранять текущее состояние моего приложения, поэтому перезапуск его, как будто он был убит и снова запущен, кажется разумным решением.

Ответы на вопрос(2)

Ваш ответ на вопрос