【发布时间】:2014-10-13 15:31:37
【问题描述】:
我尝试恢复从初始视图控制器推送的简单 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;
}
navigationController 是否应该被子类化,以便它也可以从 UIViewControllerRestoration 继承?
更新: 好的,似乎从 UIViewController 推送到 UIViewController 是可行的。但是从 UIViewController 推送到 UITableViewController ,反之亦然,不起作用。如果 tableview 实现 UIViewControllerRestoration 协议,则应用程序崩溃。如果我不实现该协议,则不会保留从 tableView 推送的 UIViewControllers。
应该如何对待 UITableViewControllers 以在不崩溃的情况下保留它们?
更新: 不再崩溃。这是由于我的应用程序特有的内存错误。但是tableView仍然没有保留,推送的viewController也没有。
更新: 我的表格视图没有正确恢复的原因是因为我在后台删除了我的数据源。但是当我尝试将它推送到另一个导航控制器而不是 self.navigationController 时,我仍然遇到模态视图控制器没有显示的问题。我将恢复标识符设置为此模态导航控制器,但视图未显示。
【问题讨论】:
-
你给导航控制器一个restoreIdentifier,检查下面stare-restoration-without-storyboard,UINavigationController State Restoration (without Storyboards)
-
是的,我有。我从情节提要中尝试了 navigationController 但没有运气。只有 UIViewControllerRestoration 的 tableviewControllers 实现在某种程度上是错误的..
标签: ios objective-c xcode state-restoration uikit-state-preservation