У меня есть библиотека с классами раскадровки и контроллера, которые реализуют сохранение состояния iOS.
Чтобы запустить библиотеку из делегата основного приложения, я использую следующее:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
[self.window makeKeyAndVisible];
self.window.rootViewController = myLibrary.sharedInstance.firstController;
return YES;
}
Затем внутри моей библиотеки создается firstController с:
- ( UIViewController * _Nullable ) firstController
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"libraryMain"
bundle:[NSBundle bundleForClass:self.class]];
return [storyboard instantiateViewControllerWithIdentifier:@"firstController"];
}
Пока все хорошо. Он запускает контроллер представления библиотеки, который использует раскадровку "libraryMain" библиотеки.
В делегате основного приложения я также добавил shouldSaveApplicationState и shouldRestoreApplicationState, которые возвращают YES.
Когда мое приложение переходит в фоновый режим, iOS корректно вызывает beforeSaveApplicationState в делегате и продолжает вызывать методы контроллера библиотеки encodeRestorableStateWithCoder.
Однако при попытке восстановления iOS корректно вызывает метод shouldRestoreApplicationState основного делегата приложения, но затем сразу же вылетает со следующим исключением:
Exception occurred restoring state Could not find a storyboard named 'libraryMain' in bundle ... Main App.app
Итак, iOS ищет раскадровку libraryMain в комплекте основного приложения. Как заставить iOS смотреть в комплекте библиотеки? Или просто невозможно реализовать восстановление состояния в библиотеке iOS?
Спасибо!