我尝试注销时使用委托重置我的ViewControllerA(主页)属性“类型”值。
但是我设置了断点,并且我的委托函数成功了。
当我再次登录时,在ViewWillAppear中打印我的属性“类型”。在注销之前,它还会缓存旧值。
请告诉我我怎么了。
谢谢。
class ViewControllerA: UIViewController, CustomDelegate {
enum Type: Int {
case book = 0
case pen
}
var tmpType: Type?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
printBBLog("tmpType: \(tmpType)") //before I logout the value is "pen",and I login again the value is "pen".
}
func clearType() {
printBBLog("clear")
self.tmpType = nil
printBBLog("\(self.tmpType)")
}
@objc func bookBtnClicked(sender: UIButton) {
self.tmpType = .book
}
@objc func penBtnClicked(sender: UIButton) {
self.tmpType = .pen
}
}
class ViewControllerB: UIViewController {
var delegate: CustomDelegate?
func doLogout() {
let vc = ViewControllerA()
self.delegate = vc
self.delegate?.clearType()
}
}
答案 0 :(得分:0)
您正在创建ViewControllerA
的新实例。由于您正在使用UITabBarController
,因此可以从ViewControllerA
访问ViewControllerB
并分配代表。之后,您将获得想要的结果。供参考,请检查以下代码。
class ViewControllerB: UIViewController {
var delegate: CustomDelegate?
func doLogout() {
let viewControllers = self.tabBarController?.viewControllers
if let vc1 = viewControllers[0] as? ViewControllerA {
self.delegate = vc1
self.delegate?.clearType()
}
}
}
如果在UITabBarcontroller内使用UINavigationController,则使用:
if let vc1 = ((self.tabBarController?.viewControllers?[0] as? UINavigationController)?.viewControllers[0] as? ViewControllerA)