ios - iOS 库中是否可以恢复 iOS 状态?-- 找不到名为的情节提要
问题描述
我有一个带有实现 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 在委托中正确调用 shouldSaveApplicationState 并继续调用库控制器的 encodeRestorableStateWithCoder 方法。
但是,当它尝试恢复时,iOS 正确调用了主应用程序委托的 shouldRestoreApplicationState 方法,但随后立即崩溃并出现以下异常:
Exception occurred restoring state Could not find a storyboard named 'libraryMain' in bundle ... Main App.app
所以 iOS 正在主应用程序包中寻找 libraryMain 故事板。如何让 iOS 查看库的捆绑包?还是无法在 iOS 库中实现状态恢复?
谢谢!
解决方案
如果“libraryMain”是您链接到主应用程序的静态库,则它不包含情节提要文件,并且 iOS 缺少主包中的文件(除非您特别提供)。
原因是静态库是编译代码的存档,资源必须单独包含。在这种情况下,您需要找到一种方法来捆绑您的资源 - 或者将“libraryMain”故事板直接包含到主应用程序中,或者创建一个“资源”捆绑包。
如果“libraryMain”是一个内部带有故事板文件的框架,那么有一些解决方法。
有关状态保存的文档指出,iOS 会检查两个地方以恢复控制器:
- viewControllerWithRestorationIdentifierPath:coder:的恢复类(firstController 类,在您的问题中)。在这里您可以创建和配置第一个控制器的实例
- 应用程序委托的application:viewControllerWithRestorationIdentifierPath:coder:。在这里,您可以根据还原路径创建类的实例。
上面的两个选项看起来都是解决方法,因为我没有您的项目的实际设置来重现问题。
推荐阅读
- excel - Excel vba 将 Word 文件保存在位置 - 运行缓慢
- java - 如何手动填充表格/网格
- javascript - 如何在 Select 标签中放置 2000 多个项目?
- html - 为 CSS 动画添加悬停效果
- c# - 如何在c#中反序列化来自http发布的json文件的数据
- javascript - 为什么 classList.contain() 总是返回 false?
- reactjs - 将类组件函数转换为函数组件函数
- r - 当统计测试使用二进制变量时,将 p 值输出保存到数据帧
- javascript - 为什么 document.addEventListener('DOMContentLoaded', Store.DisplayBooks) 不起作用
- python - 尝试使用来自 csv 文件的 4 个输入来模拟一个 FMU 时出错