我尝试恢复我从初始 View Controller 推送的简单 UIViewController。第一个被保留,但第二个在重新启动时就消失了。我不使用 Storyboard。我在每个 View Controller 中实现该协议(protocol),并将 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 或从 UIViewController 推送到 UITableViewController 是行不通的。如果 tableview 实现了 UIViewControllerRestoration 协议(protocol),应用程序就会崩溃。如果我不实现该协议(protocol),则不会保留从 tableView 推送的 UIViewControllers。
应该如何对待 UITableViewControllers 以在不发生崩溃的情况下保存它们?
更新: 不再崩溃了。这是由于我的应用程序特有的内存错误。但是 tableView 仍然没有保留,推送的 viewController 也没有。
更新: 我的 tableview 没有正确恢复的原因是因为我在后台删除了我的数据源。但是当我尝试将它推到另一个 navigationController 而不是 self.navigationController 时,我仍然遇到模态 viewController 没有显示的问题。我将恢复标识符设置为此模态 navigationController,但 View 未显示。
最佳答案
模态转换需要由 UINavigationController 支持,它具有 restorationIdentifier 和恢复类或应用程序委托(delegate)方法 viewControllerWithRestorationIdentifierPath 中的相应实现。这解决了最后一个问题。
关于ios - 恢复并保留从 UINavigationController 推送的 UIViewController,没有 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401939/