swift - 如何从另一个类修改对象的属性?

时间:2015-07-24 09:01:52

标签: ios swift object viewcontroller

我在我的主viewcontroller中添加了第二个viewcontroller。当我的第二个视图控制器想要修改主视图控制器的对象时,它会收到错误。

第一个viewcontroller

class ViewController: UIViewController {

    var uview:UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        uview = UIView(frame: CGRectMake(55, 175, 100, 100))
        uview.backgroundColor = UIColor.greenColor()
        self.view.addSubview(uview)


        var sec = second()
        self.addChildViewController(sec)
        self.view.addSubview(sec.view)
        sec.didMoveToParentViewController(self)
    }
}

第二个视图控制器

class second: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        var button:UIButton = UIButton(frame: CGRectMake(55, 55, 100, 100))
        button.backgroundColor = UIColor.redColor()
        button.addTarget(self, action: "press", forControlEvents:UIControlEvents.TouchUpInside)
        self.view.addSubview(button)
    }

    func press(){
        var first:ViewController = ViewController()
        first.uview!.backgroundColor = UIColor.purpleColor()     
    }
}

错误消息

fatal error: unexpectedly found nil while unwrapping an Optional value

Thread 1:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)

1 个答案:

答案 0 :(得分:4)

使用此行var first:ViewController = ViewController(),您将创建另一个ViewController实例,而不是引用所需的视图控制器。 由于你有父/子关系,你可以做

if let parent = self.parentViewController as ViewController {
    /*do something with parent variable*/
}

还有一件事,您的崩溃发生是因为您的新实例尚未加载其视图(viewDidLoad)并且未设置uview变量。