Восстановить и сохранить UIViewController, отправленный из UINavigationController, без раскадровки

Я пытаюсь восстановить простой 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. Я установил идентификатор восстановления для этого модального навигационного контроллера, но представление не отображается.


person user2908112    schedule 20.08.2014    source источник
comment
дали ли вы restoreIdentifier навигационному контроллеру, проверьте следующее: ">взгляд-восстановление-без-раскадровки, Восстановление состояния UINavigationController ( без раскадровки)   -  person Pawan Rai    schedule 20.08.2014
comment
Да, у меня есть. Я пробовал navigationController из раскадровки, но не повезло. Только реализация tableviewControllers UIViewControllerRestoration, которая как-то неверна.   -  person user2908112    schedule 20.08.2014


Ответы (1)


Модальный переход должен поддерживаться UINavigationController, у которого есть restoreIdentifier и либо класс восстановления, либо соответствующая реализация в методе делегатов приложения viewControllerWithRestorationIdentifierPath. Это решило последнюю часть проблемы.

person user2908112    schedule 21.08.2014