Восстановление состояния в раскадровке

Я пытаюсь сохранить и восстановить состояние определенного VC в своем приложении, и до сих пор не смог принудительно выйти из приложения и восстановить состояние, несмотря на то, что реализация (я думаю) должна помочь. Я просмотрел документацию и несколько примеров, но все еще пытаюсь заставить реализацию работать. Я установил идентификатор восстановления в раскадровке, и здесь есть все необходимые функции в AppDelegate:

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }
    
    // For non-scene-based versions of this app on iOS 13.1 and earlier.
    func application(_ application: UIApplication, shouldSaveApplicationState coder: NSCoder) -> Bool {
        coder.encode(1.0, forKey: "version")
        return true
    }

    // For non-scene-based versions of this app on iOS 13.1 and earlier.
    func application(_ application: UIApplication, shouldRestoreApplicationState coder: NSCoder) -> Bool {
        let version = coder.decodeFloat(forKey: "version")
        if(version == 1.0) {
            return true
        }
        return false
    }
    
    @available(iOS 13.2, *)
    // For non-scene-based versions of this app on iOS 13.2 and later.
    func application(_ application: UIApplication, shouldSaveSecureApplicationState coder: NSCoder) -> Bool {
        coder.encode(1.0, forKey: "version")

        return true
    }
    
    @available(iOS 13.2, *)
    // For non-scene-based versions of this app on iOS 13.2 and later.
    func application(_ application: UIApplication, shouldRestoreSecureApplicationState coder: NSCoder) -> Bool {
        let version = coder.decodeFloat(forKey: "version")
        if(version == 1.0) {
            return true
        }
        return false
    }

и в моем контроллере представления:

extension CurrentSessionVC {
   
    override func encodeRestorableState(with coder: NSCoder) {
        super.encodeRestorableState(with: coder)
        
        coder.encode("Hello World", forKey: "message")
    }
    
    override func decodeRestorableState(with coder: NSCoder) {
        super.decodeRestorableState(with: coder)
        
        let message = coder.decodeObject(forKey: "message") as! String
        print(message)
        
    }
}

Я устанавливаю несколько точек останова, чтобы увидеть, что происходит, и когда я выполняю несколько задач и очищаю приложение, срабатывает точка останова в shouldSaveSecureApplicationState, затем, когда я закрываю приложение, останавливаю программу и повторно запускаю ее функция shouldRestoreSecureApplicationState срабатывает, но представление контроллер НЕ восстанавливается. Я прошел и протестировал один из примеров яблок (https://developer.apple.com/documentation/uikit/uiviewcontroller/restoring_your_app_s_state), и он работает именно так, как должен, вы очищаете приложение, и в следующий раз, когда вы открываете приложение, оно продолжает работу с того места, где вы остановились. Я совсем пропустил что-то важное?


person Noah Iarrobino    schedule 25.09.2020    source источник


Ответы (1)


  • Приостановите работу приложения, открыв главный экран на симуляторе iPhone. Вы можете провести по нему вверх или использовать сочетание клавиш: «Command (⌘) + Shift (⇧) + H».

!!! Не закрывайте приложение вручную, смахнув его вверх из меню многозадачности. В этом случае система удалит всю информацию о состоянии.

  • Остановите отладчик Xcode, нажав кнопку STOP, или используйте сочетание клавиш: «Command (⌘) +».
  • Перезапустите приложение с помощью Xcode
person AlexanderZ    schedule 29.09.2020