gpt4 book ai didi

ios - 如何从 Swift 中的 appdelegate 调用 ViewController 中的函数?

转载 作者:行者123 更新时间:2023-12-01 18:50:14 26 4
gpt4 key购买 nike

我正在尝试调用 ViewController 中的函数来自 appdelegate在 swift ?

Appdelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
var first: FirstViewController!

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {

FirstViewController.fileurl(url)
first.fileurl(url)
return true
}
}

FirstViewController.swift
import UIKit
class FirstViewController: UIViewController {
var externalFile: NSURL!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func fileurl(url: NSURL){
externalFile = url
println("externalFile = \(externalFile)")
}
}

Appdelegate.swift ,我调用 FirstViewController.fileurl()并尝试调用 first.fileurl() .

当我调用 FirstViewController.fileurl(url) , 它显示 无法使用“(NSURL)”类型的参数列表调用“fileurl” .

当我调用 first.fileurl(url) ,它崩溃并且错误日志是 fatal error :在展开可选值时意外发现 nil .

我错过了什么吗?提前致谢。

最佳答案

这是你的 UIViewController 叫 first那是没有初始化的。如果这是在另一个地方完成的,例如在加载应用程序期间的 Storyboard 中,您只需将 rootviewcontroller 分配给您的变量。一种方法是:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
var first: COBezierDemoViewController?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

if let firstViewController = self.window?.rootViewController as? COBezierDemoViewController {
self.first = firstViewController
}

return true
}

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
first?.fileurl(url)
}
}

关于ios - 如何从 Swift 中的 appdelegate 调用 ViewController 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com