iOS 库中可以恢复 iOS 状态吗? -- 找不到名为的故事板

2023-12-14

我有一个带有故事板和控制器类的库,用于实现 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 正在主应用程序包中寻找库Main Storyboard。如何让 iOS 查看库的捆绑包?或者是不可能在 iOS 库中实现状态恢复?

Thanks!


如果“libraryMain”是链接到主应用程序的静态库,则它不包含故事板文件,并且 iOS 缺少主包中的文件(除非您专门提供)。

原因是静态库是编译代码的存档,资源必须单独包含。在这种情况下,您需要找到一种方法来捆绑您的资源 - 要么将“libraryMain”故事板直接包含到主应用程序中,要么创建一个“资源”捆绑包。

如果“libraryMain”是一个内部有故事板文件的框架,那么有一些解决方法。

The 文档关于状态保存,请注意,iOS 检查两个位置以恢复控制器:

  1. viewControllerWithRestorationIdentifierPath:编码器:恢复类(firstController 类,在你的问题中)。在这里您可以创建并配置第一个控制器的实例
  2. 应用程序:viewControllerWithRestorationIdentifierPath:编码器:应用程序委托的。在这里您可以根据恢复路径创建类的实例。

上面的两个选项看起来都像是解决方法,因为我没有项目的实际设置来重现问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 库中可以恢复 iOS 状态吗? -- 找不到名为的故事板 的相关文章

随机推荐

  • String.Format 在 TypeScript 中不起作用

    String Format不适用于TypeScript Error The property format does not exist on value of type prototype String fromCharCode code
  • 使用 TCP 连接获取字节数组

    我正在使用UDP发送 接收数据 但我现在想切换到TCP以避免数据包丢失 我读过一些关于TCP并注意到 而不是像使用 DatagramPacketUDP TCP使用输入流 输出流 我们如何从 DataInputStream 获取 byte 类
  • WordPress主题中通过$.ajax调用外部url

    我的 WordPress 应用程序托管在 url 上http 127 0 0 1 wordpress 我在 WordPress 标头中添加了以下脚本来获取一些令牌 但它没有给出任何令牌 我复制了该网址 http 127 0 0 1 8090
  • 如何用 Objective C 杀死一个线程?

    我调用了一个第三方 C 库 我已将其放入其自己的线程中 当前使用 NSThread 我想让用户能够停止该线程的执行 我很清楚这可能会导致的所有问题 但我仍然希望这样做 根据Apple 的线程编程指南 Cocoa 有可能这样做 iPhone
  • STL 中 UTF8 与宽字符的转换

    是否可以以独立于平台的方式将 std string 中的 UTF8 字符串转换为 std wstring 反之亦然 在 Windows 应用程序中 我将使用 MultiByteToWideChar 和 WideCharToMultiByte
  • 为每个发布环境转换 Azure 网站部署的 web.config

    在 Visual Studio Team Services 以前的 Visual Studio Online 中 我有三个发布环境 每个环境都有一个 Azure 网站部署步骤 我可以通过指定获取 Web Uat config 的 Build
  • 使用 solr 索引维基百科转储

    我的机器上安装了 solr 3 6 2 与 tomcat 完美运行 我想使用 solr 索引维基百科转储文件 如何使用 DataImportHandler 执行此操作 还有其他办法吗 我对 xml 没有任何了解 我提到的文件解压后大小约为
  • Hadoop中多个reducer如何只输出一个part-file?

    在我的map reduce 作业中 我使用4 个reducer 来实现reducer 作业 因此 通过这样做 最终输出将生成 4 个部分文件 part 0000part 0001part 0002part 0003 我的问题是 尽管hado
  • 对角带中的遍历矩阵

    我认为这个问题有一个简单的解决方案 几个 for 循环和一些奇特的计数器 但显然它相当复杂 所以我的问题是 你将如何 用 C 语言 编写对角条中方阵的函数遍历 Example 1 2 3 4 5 6 7 8 9 必须按以下顺序遍历 1 2
  • 与 NSPersistentContainer 的核心数据并发

    NOTE 我看过类似的问题 但没有找到描述这种情况的问题 我正在查看 Apple 提供的有关核心数据并发性的以下示例代码 https developer apple com library content documentation Coc
  • Webpack 开发服务器由 nginx 代理的独立子域

    我目前陷入了 webpack dev server 的一个问题 它用错误的端口侦听错误的域 我已经对我的 Symfony 应用程序进行了 docker 化 它有 3 个容器 节点 php 和 nginx 在 Node 容器上 webpack
  • PHP SimpleXML:如何加载 HTML 文件?

    当我尝试使用以下命令将 HTML 文件加载为 XML 时simplexml load string我收到许多关于 HTML 的错误和警告 但它失败了 有没有办法使用 SimpleXML 正确加载 html 文件 该 HTML 文件可能包含不
  • 如何为 Redis 中的数据建模以获得复杂的数据结构?

    我参考了链接 http panuoksala blogspot com 2015 09 redis many to many html开发以下代码 我已经实现了一些代码 看起来到目前为止什么都无法实现 获取用户1组 hget User 1
  • 浮动 div 无法正确堆叠(没有间隙)

    我有一个容器 里面有很多漂浮的物品 问题是 当其中至少一个的大小发生变化时 就会出现间隙 有什么办法可以迫使他们填补这些空白吗 wpr padding 20px wpr span width 260px min height 130px b
  • this.method 不是 setInterval 的函数 [重复]

    这个问题在这里已经有答案了 我有这个简单的代码 var Modules function use strict return TIMER function var timer null return time 100 init functi
  • 如何检测动态库加载

    有没有办法检测应用程序在运行时加载哪些动态库 我看过苹果的文档对于动态库 但似乎没有讨论这一点 要获取应用程序在运行时加载的所有库的列表 import the dynamic linker API import
  • Linux 上的 Python 从管道读取行

    创建管道时os pipe 它返回 2 个文件号 一个读端和一个写端 可以通过以下方式写入和读取os write os read 没有 os readline 可以使用readline吗 import os readEnd writeEnd
  • 我可以关闭 web.xml 中的 HttpSession 吗?

    我想完全消除 HttpSession 我可以在 web xml 中做到这一点吗 我确信有特定于容器的方法可以做到这一点 这就是当我进行 Google 搜索时搜索结果拥挤的原因 附 这是一个坏主意吗 我更喜欢完全禁用某些东西 直到我真正需要它
  • PHP中的日期格式

    我有一个字符串 如下所述 ts 3 11 09 11 18 59 AM 我用的是date 功能 现在我需要将其转换为可读格式 如下所示 11 Mar 2009 我已经尝试了一切使用date 我怎样才能实现这个目标 您需要将其转换为可用于进一
  • iOS 库中可以恢复 iOS 状态吗? -- 找不到名为的故事板

    我有一个带有故事板和控制器类的库 用于实现 iOS 状态保存 要从主应用程序的委托启动库 我使用以下命令 BOOL application UIApplication application didFinishLaunchingWithOp