【问题标题】:Can't get variable in ViewController无法在 ViewController 中获取变量
【发布时间】:2019-03-22 04:31:35
【问题描述】:

我想从 AppDelegate 获取 ViewController 变量,我试过了:

//1.
print(ViewController().strName)

//2.
let vc = ViewController()
print(vc.strName)

//3.
let vc = UIApplication.shared.keyWindow!.rootViewController as! ViewController
print(vc.strName)

都不行,打印值为空...

ViewController 中的代码:

var strName : String = ""
override func viewDidLoad() {

    strName = "Tom"

}

【问题讨论】:

  • 你能分享你ViewController类吗?
  • 有什么适合你的答案吗?如果没有,请分享您的 ViewController 代码以获取更多信息。
  • 抱歉回复太晚了。 ViewController 中的代码已更新!谢谢。而“print(...)”代码实际上是在通知中但没关系吧?

标签: xcode swift4 appdelegate


【解决方案1】:

我建议查看此链接Swift: How to access in AppDelegate variable from the View controller? 否则在视图控制器中尝试,

class ViewController: UIViewController {

  var strName = "someString" // some value

}

在 AppDelegate 中,

    var mainViewController = ViewController()

func applicationWillEnterForeground(_ application: UIApplication) {
    _ = self.window?.rootViewController as? ViewController
    print(mainViewController.strName)
}

【讨论】:

  • 这在“let viewController = self.window?.rootViewController as?ViewController”处有错误信息
  • @Edem,现在检查编辑的答案,检查你是否在视图控制器中有导航控制器....我已经尝试过它的工作,我可以在 appdelegate 中打印值(或者尝试这样做完成应用委托中的启动部分)
  • @Edem,您是否在视图控制器中编写了 var strName = "some value",并且您是否在 func appdidfinishlaunchsection 中尝试过。说真的,我尝试过并且可以打印该值...检查您是否遗漏了任何内容..
  • 是的,作为我的帖子,我是在viewdidload中写的。
  • @Edem,然后你会得到打印值为 nil 或空,因为 view controller 中的viewedload函数没有在应用程序委托中调用,它的值为 nil 还为时过早。它应该是 var strName = "Tom",而不是在视图控制器的 viewdidload 中以在应用程序委托中打印。
猜你喜欢
  • 1970-01-01
  • 2021-06-22
  • 2018-08-22
  • 1970-01-01
  • 2015-11-02
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
相关资源
最近更新 更多