首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift -如何从另一个类修改对象的属性?

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

Stack Overflow用户
提问于 2015-07-24 09:01:51
回答 1查看 2.5K关注 0票数 1

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

第一视图控制器

代码语言:javascript
复制
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)
    }
}

第二视图控制器

代码语言:javascript
复制
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()     
    }
}

错误消息

代码语言:javascript
复制
fatal error: unexpectedly found nil while unwrapping an Optional value

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 09:09:24

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

代码语言:javascript
复制
if let parent = self.parentViewController as ViewController {
    /*do something with parent variable*/
}

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31606343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档