Предположительно у вас что-то вроде этого:
and your code runs along these lines:
protocol MyCustomDelegate: class {
func myFunc(_ value: Int)
}
class VC1: UIViewController, MyCustomDelegate {
func myFunc(_ value: Int) {
print("value: \(value)")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? VC2 {
vc.delegate = self
}
}
}
class VC2: UIViewController {
weak var delegate: MyCustomDelegate?
func someAction(_ sender: Any?) -> Void {
delegate?.myFunc(1)
}
}
Now, you "insert a new VC":
введите описание изображения здесь
Итак, ваш код в VC1
больше не переходит на VC2
... и, таким образом, делегат не будет установлен.
Один подход, не обязательно лучший , будет:
- добавить переменную делегата в
VC1A
, которая установлена VC1
- при переходе от
VC1A
к VC2
, передать этот делегат вместе
Это может выглядеть примерно так:
protocol MyCustomDelegate: class {
func myFunc(_ value: Int)
}
class VC1: UIViewController, MyCustomDelegate {
func myFunc(_ value: Int) {
print("value: \(value)")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? VC1A {
vc.delegate = self
}
}
}
class VC1A: UIViewController {
weak var delegate: MyCustomDelegate?
func someAction(_ sender: Any?) -> Void {
delegate?.myFunc(1)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? VC1A {
vc.delegate = self.delegate
}
}
}
class VC2: UIViewController {
weak var delegate: MyCustomDelegate?
func someAction(_ sender: Any?) -> Void {
delegate?.myFunc(1)
}
}
Если поток вашего приложения достаточно прост, это, вероятно, сработает ... но это не идеально и подвержено проблемам по мере того, как ваш код становится более сложным.
Возможно, вы захотите переосмыслить структуру вашего кода и то, как вы пытаетесь управлять своими данными.