我尝试恢复从初始视图控制器推送的简单UIViewController。第一个被保留,但第二个刚刚重新启动时消失。我不使用故事板。我在每个视图控制器中实现协议,并将restorationIdentifier和restorationClass添加到每个视图控制器中。
第二个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;
}
是否应该将navigationController设为子类,以便它也可以从UIViewControllerRestoration继承?
更新: 好吧,似乎从UIViewController推送到UIViewController工作。但是从UIViewController推送到UITableViewController,反之亦然,不行。如果tableview实现UIViewControllerRestoration协议,应用程序崩溃。如果我没有实现协议,则不会保留从tableView推送的UIViewControllers。
如何处理UITableViewControllers以保护它们而不会崩溃?
更新: 没有崩溃..这是由于我的应用程序特定的内存错误。但是tableView仍然没有被保留,也没有被推送的viewController。
更新: 我的tableview没有正确恢复的原因是因为我在后台删除了我的数据源..但是当我尝试将其推送到另一个navigationController而不是self.navigationController时,我仍然遇到模态viewController没有出现的问题。我将恢复标识符设置为此模态navigationController,但视图未显示。
答案 0 :(得分:1)
模态转换需要由UINavigationController支持,该控件具有restoreIdentifier和应用委托方法viewControllerWithRestorationIdentifierPath中的恢复类或相应的实现。这解决了最后一个问题。