UIViewController 实例问题

Posted

技术标签:

【中文标题】UIViewController 实例问题【英文标题】:UIViewController instance issue 【发布时间】:2016-05-13 05:46:00 【问题描述】:

我正在尝试在单独的 swift 文件 (Login.swift) 上设置 NSUserDefaults 变量以确定我的用户是否已登录。如果用户确实已登录,则 LoginViewController 将消失,而 HomeViewController 将显示。但是我被抛出了这个错误

在“UIViewController”类型上使用实例成员“dismissViewControllerAnimated”;您的意思是改用“UIViewController”类型的值吗?

这是我的代码

//success
else if value["username"] != nil && value["password"] == nil && value["message"] == nil

 NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isUserLoggedIn")

 LoginViewController.dismissViewControllerAnimated(true, completion:nil)

 if let api_key = value["api_token"].string
 
    print("The token is " + api_key)
 
 else
 
    print("error parsing api token")
 
 //pass data to Users class
 _ = Users.init(Name: value["name"].string, Email: value["email"].string, Id: value["id"].int, ProfilePicture: value["profile_picture"].string, Username: value["username"].string)
 

【问题讨论】:

dismissViewControllerAnimated 是和对象方法,为什么你用类名来调用它..? 【参考方案1】:

创建 LoginViewController 的对象。 使用该对象然后调用dismissViewControllerAnimated 函数。 不允许从类名直接调用

【讨论】:

【参考方案2】:

dismissViewControllerAnimated 它的 Instance 方法不是 class 方法。看起来你是在上课打电话。

如果你在同一个控制器上使用:

[topVC dismissViewControllerAnimated:YES completion:nil];

如果您不在该控制器中,请使用

 UIViewController *topVC =  [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController;
 [topVC dismissViewControllerAnimated:YES completion:nil];

【讨论】:

以上是关于UIViewController 实例问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UIPopoverController 不是 UIViewController 的子类?

以编程方式向 UIView 或 UIViewController 添加约束?

Interface Builder 是如何知道 UIViewController 的视图的?

如何在不使用 Nib 的情况下实例化和调用 UIView 子类

如何在 SwiftUI 中使用 UIViewController 和 UIView?

在 UIViewController 的主视图中加载自定义 UIView