Я пытаюсь сохранить и восстановить состояние определенного 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), и он работает именно так, как должен, вы очищаете приложение, и в следующий раз, когда вы открываете приложение, оно продолжает работу с того места, где вы остановились. Я совсем пропустил что-то важное?