繁体   English   中英

Swift 4:在viewDidLoad之后调用(for segue :)

[英]Swift 4: prepare(for segue:) being called after viewDidLoad

我有2个VC: CouponVCCouponFeedbackVC

优惠券VC收到品牌:品牌! 来自其parentViewController。 现在我想将brand.name传递给CouponFeedbackVC

CouponVC.swift

var brandName: String!
override func viewDidLoad() {
    super.viewDidLoad
    brandName = brand.name
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "couponToFeedBack" {
        if let vc = segue.destination as? CouponFeedbackVC {
            print(brandName)
            vc.brandName = self.brandName
        }
    }
}

在CouponFeedbackVC.swift中

var brandName: String!
override func viewDidLoad() {
    super.viewDidLoad()
    print("viewDidLoad")
    print(brandName)
}

 override func awakeFromNib() {
    print(brandName)
    self.view.layoutIfNeeded()
}

控制台日志

nil
viewDidLoad
nil
StayUncle

awakeFromNib() - > viewDidLoad() - > prepare(for segue :)

我没有从CouponFeedbackVC访问任何商店。

为什么在viewDidLoad()awakeFromNib()之后调用(for segue :)

awakeFromNib您引用self.view以调用layoutIfNeeded 这会导致加载视图并调用viewDidLoad

如果从awakeFromNib删除对self.view.layoutIfNeeded的调用,则在prepare(for:sender:)之后才会调用viewDidLoad 没有理由在awakeFromNib调用layoutIfNeeded

准备之前调用viewDidLoad()和awakeFromNib() (对于segue :)因为要将数据从一个视图控制器传递到另一个视图控制器,你必须初始化并分配对象所以当调用awakeFromNib时,它保证具有所有的出口和动作连接已经建立,并且调用viewDidLoad ,这使得视图控制器已将其视图层次结构加载到内存中。 现在它准备好将数据从一个viewcontroller传递到另一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM