2015-08-26 5 views
1

Я знаю, что это повторяющийся вопрос, но я не нашел решения для своей проблемы. У меня два контроллера. Переменная HomeViewcontroller значения «myValue» не может быть задана с помощью класса ViewController. Я не знаю этой проблемы, но код работает без ошибок. Но когда я печатаю «myValue», он показывает nil. Контроллер представления не является контроллер, который я хочу установить значение переменной. Контроллер представления назначения - это контроллер панели вкладок, поэтому я хочу установить значение переменной для первой панели вкладок и вторых контроллеров представления панели вкладок. Это мой код: -Почему невозможно установить значение переменной viewController с помощью другого viewController?

import UIKit 

    class ViewController: UIViewController { 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

    if(segue.identifier == "gotoHome") { 
     println("1111") 

     var storyboard = UIStoryboard(name: "Main", bundle: nil) 
     var viewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController 
     viewController.myValue = 8888 


     } 

     } 


    } 

это другой контроллер представления

import UIKit 

class HomeViewController: UIViewController { 

    var myValue: Int! 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
     println(myValue) 

     } 
    } 

ответ

1

Вам не нужно создать экземпляр ViewController, как это уже было сделано, вам просто нужно получить viewcontroller для текущей операции segue, поэтому ваш код должен выглядеть ниже

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

    if(segue.identifier == "gotoHome") { 
     println("1111") 

     let controller = segue.destinationViewController as! UITabBarController 
     let homeController = controller.selectedViewController as !HomeViewController 
     homeController.myValue = 8888 


    } 

} 

Надеюсь, это поможет.

+0

Проблема заключается в том, что контроллер представления назначения не является контроллером, который я хочу установить значение переменной. –

+0

@ChathurangaSilva Затем вам нужно изменить соединение segue на правильный VIewController, который вы хотите нажать. – iphonic

+0

он печатает значение в 'viewDidLoad', которое вызывается, когда представление загружается из раскадровки. В этот момент 'myValue' еще не имеет значения, потому что он установлен после создания экземпляра представления. – donnywals

1

Изменить на:

let viewController = segue.destinationViewController as! HomeViewController 
+0

Проблема в том, что контроллер представления назначения не является контроллером, который я хочу установить значение переменной. –

+0

Контроллер назначения не является HomeViewController? –

+0

Нет, если перейти к другому контроллеру представления, мне нужно установить varibale другого контроллера. Не переделывать varibale контроллера вида назначения –

0

Вы печатаете значение myValue в viewDidLoad, которое вызывается при создании его из раскадровки. После создания экземпляра вы устанавливаете myValue. Попробуйте напечатать myValue в viewWillAppear, например, тогда он должен быть установлен.

+0

Спасибо за помощь, но все еще показывает ноль –