AppDelegate访问ViewController

时间:2018-03-08 10:41:04

标签: ios swift

在我的xcode 9.2 swift 4项目中,我有两个类,一个是AppDelegate,我处理所有应用程序特定的功能(如订阅和接收推送通知)和ViewController(Main.storyboard id is ShitstuffController)我处理我的WKWebView

我想要做的是,当应用程序处于非活动状态或后台时 并且用户已收到并点击本地通知,在我的ViewController's WKWebView中通过该通知收到的打开链接。

我正试图像这样访问ViewController

// AppDelegate.swift code
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "ShitstuffController")
controller.loadViewIfNeeded();

print(controller);

此时我正在

<Application.ViewController: 0x105c200a0>

其中Application是我的实际应用程序名称,所以我假设我成功访问了ViewController,但是当我尝试从中调用方法时,例如

// ViewController.swift code
func getDictionaryValue(string: String) -> String {
    let dictionary = Bundle.main.infoDictionary!;
    let version = dictionary[string] as! String;
    return version;
}

喜欢

// AppDelegate.swift code
controller.getDictionaryValue(string: "CFBundleDisplayName");

我收到错误Value of type 'UIViewController' has no member 'getDictionaryValue'

1 个答案:

答案 0 :(得分:2)

ShitstuffController 不属于UIViewController类实际上是UIViewController子类ViewController所以你需要强制转换为ViewController

if let controller = storyboard.instantiateViewController(withIdentifier: "ShitstuffController") as? ViewController {
  controller.loadViewIfNeeded();
  controller.getDictionaryValue(string: "CFBundleDisplayName");
  print(controller); 
} 

然后您就可以调用getDictionaryValue方法