iOS库中是否可以恢复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]; [
- (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,以便在开始状态恢复之前创建库的视图控制器。它启动的应用程序很好,但我仍然有相同的“找不到一个故事板命名”的问题,在恢复过程中。接下来,我将讨论“变通办法”。再次感谢你的帮助。