捕获UIApplication中的触摸并在ViewController中调用函数导致错误

时间:2016-03-29 17:31:26

标签: ios swift uiviewcontroller uiapplication uievent

我有以下Swift 2代码设置,可捕获整个应用程序中的所有触摸。它会在触摸发生和触摸停止时发出警报。

我希望在触摸发生时以及停止时访问另一个名为myVC的视图控制器中的两个函数,调用函数一funcOne()并运行两个funcTwo()。但是我不断收到错误fatal error: unexpectedly found nil while unwrapping an Optional value。似乎只要调用myVC,就会导致错误。

如何在没有错误的情况下实现调用ViewController上的函数,取决于应用程序何时接收或未在Swift 2中接收任何触摸事件?

main.swift档案:

import UIKit

UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))

UIApplication.swift档案:

import UIKit

@objc(MyApplication)

class MyApplication: UIApplication {

var myVC: ViewController!

    override func sendEvent(event: UIEvent) {

        if event.type != .Touches {
            super.sendEvent(event)
            return
        }

        var touchesStarted = false
        if let touches = event.allTouches() {
            for touch in touches.enumerate() {
                if touch.element.phase != .Cancelled && touch.element.phase != .Ended {
                    touchesStarted = true
                    break
                }
            }
        }

        if touchesStarted {
    myVC.funcOne()  // Call function one on ViewController
        } else {
    myVC.funcTwo() // Call function two on ViewController
        }

        super.sendEvent(event)
    }
}

1 个答案:

答案 0 :(得分:1)

问题是你在说

 var myVC: ViewController!

但您永远不会变量myVC设置为任何值(即现有的ViewController实例)。因此它始终是nil,因此当您在代码中引用它时,就会崩溃。

我的建议是,这个视图控制器在其自己的viewDidLoad中应该说

(UIApplication.sharedApplication() as MyApplication).myVC = self