我尝试恢复从初始视图控制器推送的简单 UIViewController。第一个被保留,但第二个在重新启动时消失。我不使用故事板。我在每个视图控制器中实现该协议,并将 restoreIdentifier 和 restoreClass 添加到每个视图控制器中。
第二个 viewController 继承自第三个 viewController 并从 xib 文件初始化。我不确定是否需要将 UIViewControllerRestoration 实现到第三个,因为我不直接使用它。
我的代码通常看起来像这样:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.restorationIdentifier = @"EditNotificationViewController";
self.restorationClass = [self class];
}
return self;
}
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
}
-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
}
+(UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder
{
EditNotificationViewController* envc = [[EditNotificationViewController alloc] initWithNibName:@"SearchFormViewController" bundle:nil];
return envc;
}
导航控制器是否应该被子类化,以便它也可以从 UIViewControllerRestoration 继承?
更新:好的,似乎从 UIViewController 推送到 UIViewController 有效。但是从 UIViewController 推送到 UITableViewController ,反之亦然,不起作用。如果 tableview 实现 UIViewControllerRestoration 协议,则应用程序崩溃。如果我不实现该协议,则不会保留从 tableView 推送的 UIViewControllers。
应该如何对待 UITableViewControllers 以保护它们而不会崩溃?
更新:不再崩溃。这是由于我的应用程序特有的内存错误。但是tableView仍然没有保留,推送的viewController也没有。
更新:我的tableview没有正确恢复的原因是因为我在后台删除了我的数据源。但是当我尝试将它推送到另一个navigationController而不是self.navigationController时,我仍然遇到模态viewController没有显示的问题。我将恢复标识符设置为此模态导航控制器,但视图未显示。