Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS库中是否可以恢复iOS状态?--找不到名为的情节提要_Ios_State Restoration_Ios Library - Fatal编程技术网

iOS库中是否可以恢复iOS状态?--找不到名为的情节提要

iOS库中是否可以恢复iOS状态?--找不到名为的情节提要,ios,state-restoration,ios-library,Ios,State Restoration,Ios Library,我有一个带有故事板和控制器类的库,这些类实现了iOS状态保存 要从主应用程序的委托启动库,我使用以下命令: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; [

我有一个带有故事板和控制器类的库,这些类实现了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,并继续使用coder方法调用库控制器的encodeRestorableState

但是,当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检查两个位置以恢复控制器:

  • 恢复类(第一个控制器类,在您的问题中)。在这里,您可以创建和配置第一个控制器的实例
  • 应用程序委托的。在这里,您可以基于恢复路径创建类的实例

  • 以上两个选项看起来都像是权宜之计,因为我没有您的项目的实际设置来重现问题。

    是您问题的解决方案吗?谢谢。但是,我不知道如何使用它。我是否在shouldRestoreApplicationState方法期间将当前包更改为我的库?这看起来相当骇人听闻,如果主应用程序也有需要恢复的情节提要,会发生什么?现在我正在寻找一个可能的解决方案。使用[NSBundle mainBundle]而不是[NSBundle bundleForClass:self.class]是的,我创建了一个框架,其中包含一个名为“libraryMain”的故事板。我试试你的建议#2似乎很有希望,因为我可以返回firstController对象。由于iOS似乎已经忘记了框架的捆绑包,所以不确定它是否能工作。谢谢,是的。抱歉,还有什么选择?我在想如果框架没有嵌入,那么这就是找不到故事板的原因,但事实并非如此。在实际阅读了,第一张图清楚地表明,整个恢复过程发生在我第一次调用框架的委托中调用application:didFinishLaunchingWithOptions:之前。我很确定解决方案就在这里,希望在application:willFinishLaunchingWithOptions:willFinishLaunchingWithOptions中调用框架是我需要做的全部或至少部分。今天将尝试..我将application:didFinishLaunchingWithOptions替换为application:willFinishLaunchingWithOptions,以便在开始状态恢复之前创建库的视图控制器。它启动的应用程序很好,但我仍然有相同的“找不到一个故事板命名”的问题,在恢复过程中。接下来,我将讨论“变通办法”。再次感谢你的帮助。