在ViewDidLoad中查看值为nil但在didSet中具有值

时间:2016-06-29 18:10:49

标签: ios swift segue

我将Core Data实体传递给下一个View Controller,其prepareForSegue如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "MemberDetails" {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("MemberDetails") as! MemberDetails
        let index = self.memberTable.indexPathForSelectedRow
        if searchPredicate == nil {
            let member = self.sections[index!.section].members[index!.row]
            member.printMember()
            vc.member = member
        } else {
            vc.member = self.filteredMembers[index!.row]
        }

    }
}

在我接收的View Controller中,我有这个:

var member : Member? {
    didSet {
        print("")
        print(" --------------------- ")
        print("")
        member?.printMember()
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    print("")
    print(" --------View Did Load -------- ")
    print("")
    self.member?.printMember()
}

使用以下输出:

  

----------_-----------

     

// member.printMember()函数输出

     

--------查看已加载--------

     

//没有输出 - >对象是零

这意味着didSet在viewDidLoad之前发生并且它有值但是由于某种原因它在执行viewDidLoad时再次被清空(object = nil)

为什么会这样? /我如何减轻这种影响?

1 个答案:

答案 0 :(得分:2)

我认为你误解了什么是segue。

您正在prepareForSegue

上实例化新的MemberDetails
 let storyboard = UIStoryboard(name: "Main", bundle: nil)
 let vc = storyboard.instantiateViewControllerWithIdentifier("MemberDetails") as! MemberDetails

如果调用了prepareForSegue方法,这意味着故事板中的viewController已经被加载

你需要的是

if segue.identifier == "MemberDetails" {
      if let vc = segue.destinationViewController as? MemberDetails{
           let index = self.memberTable.indexPathForSelectedRow
           if searchPredicate == nil {
                let member = self.sections[index!.section].members[index!.row]
                member.printMember()
                vc.member = member
           } else {
                vc.member = self.filteredMembers[index!.row]
           }
       }
}