添加
UIViewControllerRestoration
解决了这个问题对我来说。如果你点击了该协议的参考,它说:
// A class must implement this protocol if it is specified as the restoration class of a UIViewController.
@import UIKit;
@interface AppDelegate : UIResponder <UIApplicationDelegate, UIViewControllerRestoration>
@property (strong, nonatomic) UIWindow *window;
@end
在编写程序的文档:
恢复类实现UIViewControllerRestoration 协议,并负责寻找或创造一个指定的 对象恢复时间。下面是一些提示何时使用每个:
1)如果视图控制器始终从在启动时您的应用程序的主 故事板文件加载,不分配恢复类。 相反,让您的应用程序代理找到对象或利用 的UIKit的支持隐式寻找还原的对象。
2)查看 控制器未从主要故事板文件加载到 启动时间,请分配恢复类。最简单的选项是 使每个视图控制器自己的恢复类。
到目前为止,我的理解是这样的。如果没有UIViewControllerRestoration协议,appDelegate不是恢复类(1)。因此,该警告是在应用程序启动时(恢复时间)写入的。应用程序委托无法以某种方式查找需要分配给标记文件的对象。问题出在appDelegate。当应用程序委托变成恢复类时,它跳过步骤1)并继续步骤2)。看来,AppDelegate成为所有其他视图的主要恢复类。下面的方法:
+ (UIViewController*) viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents
coder:(NSCoder *)coder {}
永远不会在我的应用程序中调用,并且恢复工作没有警告或错误。
我想明白这个问题,到底是怎么回事。我希望这可以帮助你,并欢迎评论澄清问题。 :)
我得到这样的警告,以及,不知道原因是什么 –
是如何的视图控制器产生的?他们是在故事板,或笔尖,或者您的应用程序委托中创建的,或... – Greg
我使用的分镜与导航视图控制器作为其基地。我正在尝试整合国家恢复。即使在应用程序重新启动时也会显示此消息(已删除并再次部署)。 –