ios - 恢复并保留从 UINavigationController 推送的 UIViewController,没有 Storyboard

标签 ios objective-c xcode state-restoration uikit-state-preservation

我尝试恢复我从初始 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/

相关文章:

ios - Word Wrap 不适用于 UILabel

iphone - 旋转后将文本居中对齐

swift - 使用键盘按顺序定位文本字段。 swift 4.2,Xcode 10

ios - 如何获取 MobileVLCKit 的缓冲区百分比?

xcode - Git Push 是通过终端工作的,但不是通过 Xcode 工作的

ios - 存档 Cordova 项目 - 路径不存在 : www

c# - 在 Visual Studio 中使用 C# 或 VB 创建适用于 Mac、Windows 或 iOS 的桌面应用程序

ios - 获取当前季度的第一个日期

iOS 10 : CIKernel's ROI function did not allow tiling

ios - 在 iOS 应用程序中获取 WAN IP