在 applicationWillEnterForeground 使我的应用程序崩溃后更改 IBOutlets 值

Change IBOutlets values after applicationWillEnterForeground crashes my app

使用:XCode 7,iPhone 5(iOS 8.3),WiFi,可达性(检查互联网连接)。 当我的应用程序处于后台并且我单击以打开我的应用程序时,它会检查连接并加载一些功能,并且在我尝试签名的功能之一中:

imageView.image = UIImage(named: "imagename")

错误:致命错误:在展开可选值时意外发现 nil

仅当我的应用更改 applicationWillEnterForeground 中的 IBOutlet 值并将其功能更改为主视图控制器时才会发生这种情况 self.viewController.functionName()

class AppDelegate: UIResponder, UIApplicationDelegate {
     var viewController:ViewController = ViewController()
     func applicationWillEnterForeground(application: UIApplication) {
        self.viewController.checkConn()
    }
}

checkConn() 检查与 Reachability 的连接并更改 IBOutlets 值,如 .image 和 .text

有什么办法可以解决吗?

我假设这就是您的崩溃发生的地方。

imageView.image = UIImage(named: "imagename")

如果您使用 "Images.xcassets" 来管理您的图像文件。确保 "imagename" 存在。

经过大量测试,我发现这个方法非常有效:

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    var viewController:ViewController?
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
        viewController = self.window!.rootViewController as? ViewController
        return true
    }
    func applicationWillEnterForeground(application: UIApplication) {
        viewController!.checkConn()
    }
}