2015-07-24 2 views
1

Я добавил второй диспетчер представлений к моему главному диспетчеру просмотра. Когда мой второй диспетчер представлений хочет изменить объект главного управления представлением, его получение ошибки.swift - как изменить свойство объекта из другого класса?

первый 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) 
    } 
} 

второй ViewController

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) 

ответ

4

С этой линией var first:ViewController = ViewController() вы создаете еще один экземпляр ViewController и не ссылающейся на контроллер просмотра у Вас хотеть. Как у вас отношения родитель/ребенок, вы можете сделать

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

Еще одна вещь, ваша авария происходит потому, что ваши новые экземпляры не загружать его вид уже (viewDidLoad) и переменная uview не установлен.

+0

большое спасибо ~~~~ u сохранить мою жизнь ~~~~~ –

+0

, если viewcontroller не имеет отношений родительский/дочерний, я все еще хочу изменить свойство объекта из другого viewcontroller, так что я хочу сделать? –

+0

Создайте пользовательскую переменную типа ViewController в 'second'. Затем выполните 'var sec = second(); сек. <# ViewController #> = self' в вашем первом контроллере представления. – ryancrunchi

Смежные вопросы