我有这两个类,我想从一个到另一个检索一个值:
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在这里:
希望你能帮助我。
由于
答案 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}}