来自Nav Controller的PresentViewController错误

时间:2015-06-01 21:05:19

标签: ios swift

我有一个UINavigationController子类,如果用户没有登录,我想将其重定向到登录页面。在viewdidload()我有:

if(AppUser == nil){
    var SignIn: AnyObject! = self.storyboard.instantiateViewController("SignInView") as! SignInViewController
    self.pushViewController(SignIn, animated: false)
}

AppUserNSUserDefaults对象相关联。 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

运行此操作有关

2 个答案:

答案 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
}

我改变了这一点,因为您表示SignInAnyObject!。当您处理 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)
} 

希望这会有所帮助,如果您有任何疑问,请与我联系:)