Я пытаюсь восстановить простой 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 и наоборот не работает. Приложение аварийно завершает работу, если табличное представление реализует протокол UIViewControllerRestoration. Если я не реализую протокол, UIViewControllers, выталкиваемые из tableView, не сохраняются.
Как следует обращаться с UITableViewControllers, чтобы сохранить их без сбоев?
ОБНОВЛЕНИЕ: Больше никаких сбоев. Это произошло из-за ошибки памяти, характерной для моего приложения. Но tableView по-прежнему не сохраняется, ни нажатый viewController.
ОБНОВЛЕНИЕ. Причина, по которой мое табличное представление не восстановилось должным образом, заключалась в том, что я удалил свой источник данных в фоновом режиме. Но у меня все еще есть проблема с модальным viewController, который не отображается, когда я пытаюсь нажать его на другой навигационный контроллер, чем на self.navigationController. Я установил идентификатор восстановления для этого модального навигационного контроллера, но представление не отображается.