从另一个类中检索var值

时间:2014-09-16 16:02:18

标签: ios class swift xcode6

我有这两个类,我想从一个到另一个检索一个值:

    class SearchUserViewController:UIViewController{

        var selectedUser: String!

    @IBAction func btn_accept(sender: AnyObject) {
            selectedUser = "Norolimba"
self.dismissViewControllerAnimated(true, completion: nil)
        }
    }

我将值保存到“selectedUser”var,然后我想检查此类中的值:

class CalendarViewController: UIViewController {
    override func viewDidAppear(animated: Bool) {
        let vc : SearchUserViewController! = self.storyboard.instantiateViewControllerWithIdentifier("searchView") as SearchUserViewController
        println("\(vc.selectedUser)")
        if vc.selectedUser == nil {
            self.requestData("team")
        }else{
            self.requestData("user")
        }
    }
}

但是当我打印值“vc.selectedUser”时,值为nil。那么我可以在这里做些什么来从其他类中捕获它并且不会得到零值?

searchView在这里: enter image description here

希望你能帮助我。

由于

1 个答案:

答案 0 :(得分:0)

当您使用instantiateViewControllerWithIdentifier()时,您访问屏幕上显示的视图控制器,您也无法访问可能已被自动实例化的控制器Interface Builder。

您正在做的是实例化(因此名称)该控制器的新实例。因此,该新实例的实例变量selectedUser将为nil

您应该做的事情可能是在您显示SearchUserViewController时向其提供回调,以便它可以在用户被选中时通知呈现它的视图。

或者,如果您(视图控制器)以模态方式呈现以访问呈现给您的视图控制器,则可以使用parentViewController UIViewController属性SearchUserViewController。因此,在self.parentViewController中,当它被解雇时,它可以访问CalendarViewController,这应该是class CalendarViewController : UIViewController { public func displayUserSelectionController() { let suvc : SearchUserViewController = ... (how are you displaying it?) ... self.presentViewController(suvc, animated:true, completion: { // The SUVC is hiding if let user = suvc.selectedUser { self.requestData("team") } else { self.requestData("user") } }) } ... } ,并调用方法或设置属性。

(但是对于模态控制器来假设它的父亲是谁,有点代码味道。我建议使用某种回调或委托。)

编辑:使用完成回调的示例:

{{1}}