【问题标题】:Swift: calling function from another viewcontroller makes objects nilSwift:从另一个视图控制器调用函数使对象为零
【发布时间】:2017-06-27 18:17:41
【问题描述】:

我有两个简单的 ViewController:第一个有一个链接到 UIImageView 的 IBOutlet 和一个设置图像 alpha 通道的函数。第二个控制器有一个按钮,当它被触发时,应该调用该函数来设置 Alpha 通道。

这是我的代码:

class FirstViewController: UIViewController {

     @IBOutlet imageView: UIImageView! 

     func changeAlphaChannel() {
         imageView.alpha = 0.5
     }
}

class SecondViewController: UIViewController {

     let firstController = FirstViewController()

     @IBAction func buttonPressed(sender: UIButton) {
         firstController.changeAlphaChannel()
     }
}

在 FirstViewController 中调用 changeAlphaChannel() 可以正常工作,但如果我按下按钮调用它,imageView 将变为 nil 并且应用程序崩溃。 我怎样才能解决这个问题? 谢谢

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    它崩溃了,因为你的 imageView 是 nil。仅仅用FirstViewController() 初始化firstController 是不行的。您必须从情节提要加载该视图控制器。你可以这样做

    let storyboard: UIStoryboard = UIStoryboard.init(name: "StoryboardName", bundle: nil)
    let firstViewController: FirstViewController = storyboard.instantiateViewControllerWithIdentifier("StoryboardIdentifier") as! FirstViewController
    

    更新

    现在 firstViewController 的 IBOutlets 将仅在 firstViewController 的视图被实例化时设置,在您的情况下不会发生。你要做的是首先显示 firstViewController 的视图,然后调用你的函数。

    【讨论】:

    • 感谢您的回复,我尝试了您的解决方案,但调用 firstViewController.changeAlphaChannel() 返回相同的错误:致命错误:在展开可选值时意外发现 nil 并且 imageView 仍然是 nil
    【解决方案2】:

    您没有在第一个控制器上调用该函数 - 您正在创建第一个控制器的新实例,它没有在图像中设置任何内容。

    您需要将第一个控制器的引用传递给第二个。

    【讨论】:

      【解决方案3】:

      在swift中我们需要检查运算符是否为nil,试试这个

      imageView?.alpha = 0.5

      而不是

      imageView.alpha = 0.5

      【讨论】:

        猜你喜欢
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多