我有一个UINavigationController
子类,如果用户没有登录,我想将其重定向到登录页面。在viewdidload()
我有:
if(AppUser == nil){
var SignIn: AnyObject! = self.storyboard.instantiateViewController("SignInView") as! SignInViewController
self.pushViewController(SignIn, animated: false)
}
AppUser
与NSUserDefaults
对象相关联。 SignInViewController
是一个实际的类,SignInView
是我想要的ViewController的StoryBoardID。当我将所有这些代码放在第一行的viewDidLoad()
错误中时:
"Cannot invoke 'instantiateViewController' with argument of list type '(String)'"
在第二行,它说:
"Cannot invoke 'pushViewController' with an argument list of type '(Anyobject!, animated: Bool)'"
我做错了什么?是否与从UINavigationController
而不是UIViewController
答案 0 :(得分:0)
首先,请确保self
表示您的UINavigationViewController
。
对于你的问题,我认为你需要改变这行代码:
var SignIn: AnyObject! = self.storyboard.instantiateViewController("SignInView") as! SignInViewController
进入这个:
if let signInViewController = self.storyboard.instantiateViewController("SignInView") as? SignInViewController {
// handle your sign-in view controller
}
我改变了这一点,因为您表示SignIn
是AnyObject!
。当您处理 Swift 时,您必须非常清楚?
和!
的含义。 BTW,命名惯例也很重要。
答案 1 :(得分:0)
您想使用instantiateViewControllerWithIdentifier
代替instantiateViewController
。
所以例如
if(AppUser == nil){
var signIn = self.storyboard?.instantiateViewControllerWithIdentifier("SignInView") as! SignInViewController
self.pushViewController(SignIn, animated: false)
}
您还应该从AnyObject!
删除var SignIn: AnyObject!
。此外,我没有大写的signIn更好的编程实践。如果你想这样做,这取决于你。
通过展开
来做卢卡斯在答案中所做的事情也是一种好习惯if let signIn = self.storyboard?.instantiateViewControllerWithIdentifier("SignInView") as? SignInViewController{
self.pushViewController(SignIn, animated: false)
}
希望这会有所帮助,如果您有任何疑问,请与我联系:)