Я кодирую свое приложение, чтобы пережить перезапуски согласно Сохранение пользовательского интерфейса вашего приложения при запуске . Все хорошо, все переменные, локальные для вызываемого дочернего класса, выживают. Тем не менее, я застрял при попытке выяснить, как сохранить значения делегатов моего пользовательского протокола.
Например, у меня есть два контроллера представления, один запускает другой и устанавливает свойство 'делегата' вызываемого контроллера в 'self' в prepare ():
class ParentClass: UIViewController, MyProtocolDelegate {
...
}
extension ParentClass {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segToChildClass" {
guard let vc = segue.destination as? ChildClass else { return }
[snip]
vc.myProtocolDelegate = self
...
}
}
Теперь в дочернем классе I определена переменная 'myProtocolDelegate', и я переопределяю encodeRestorableState () и decodeRestorableState (), где я успешно кодирую и декодирую все свойства, которым локально присвоены их значения в дочернем классе:
class ChildClass: UIViewController {
...
weak var myProtocolDelegate: MyProtocolDelegate?
...
override func encodeRestorableState() {
...
}
override func decodeRestorableState() {
...
}
}
Однако, когда я кодирую / декодирую ' Свойство myProtocolDelegate ', оно, безусловно, не дает желаемого эффекта (т. е. протокол не работает), например:
override func encodeRestorableState(with coder: NSCoder) {
...
coder.encode(myProtocolDelegate, forKey: "myProtocolDelegate")
}
override func decodeRestorableState(with coder: NSCoder) {
...
myProtocolDelegate = coder.decodeObject(forKey: "myProtocolDelegate") as? MyProtocolDelegate
}
Я думал, что мог бы использовать self.presentingViewController, чтобы получить указатель на родительский контроллер после восстановление (так что мне вообще не нужно было бы сохранять значение делегата). Примерно так:
override func applicationFinishedRestoringState() {
...
let parentController = self.presentingViewController
self.myProtocolDelegate = parentController.self as! ParentClass
}
Однако в моем случае self.presentingViewController оказывается равным nil.
Буду признателен за любые подсказки о том, как можно сохранить значение myProtocolDelegate. через перезапуски.
Большое спасибо!