2016-02-26 3 views
0

У меня есть метод работает, когда кнопка повернутой:передавая переменную при ViewController инициализируется

let tempVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AwardViewController") as! AwardViewController 
    tempVC.currentDocumentPartTitle = currentDocumentPart.title 

А вот класс AwardViewController,

class AwardViewController: UIViewController { 
    @IBOutlet weak var textView: UITextView! 
    var currentDocumentPartTitle: String! 

override func awakeFromNib() { 
     super.awakeFromNib() 
    //assigning text to UITextView in awakeFromNib method 
    //In order to find right textfile, currentDocumentPartTitle is used to search right data in plist. 
} 

Проблема заключается в том, что даже если я передать переменную , он возвращает ошибку значения nil в методе awakeFromNib, говоря, что currentDocumentPartTitle равен нулю. Как передать переменную до вызова awakeFromNib?

ответ

1

Это происходит потому, что awakeFromNib() выполняется до того, как свойства вида выделены. См. https://stackoverflow.com/a/377390/1214800.

Почему бы просто не сделать то, что вам нужно сделать внутри viewDidLoad()?

override func viewDidLoad() { 
    super.viewDidLoad() 
    print(currentDocumentPartTitle!) // works! 
} 
+0

Я не могу этого сделать, так как мне нужно сделать некоторую конфигурацию для textView до того, как она будет выделена в viewcontroller. Для моей конкретной ситуации это нужно сделать в awakeFromNib, и поэтому мне сложно найти время. – Kahsn

+0

Тогда вам, вероятно, придется написать настраиваемое удобство init, я думаю, что он установлен на инициализацию. Это или переписать то, что зависит от 'awakeFromNib()' (я мог видеть, что это необходимо для компонента на основе UIView, но для этих контроллеров представления имеет 'viewDidLoad()' именно по этой причине). – brandonscript

0

Вы должны поместить код, который копирует значения свойств и отображает их в пользовательском интерфейсе в методе viewWillAppear:animated: контроллера точки назначения.

Итак, для вашего класса AwardViewController добавьте код в ваш viewWillAppear:animated:, который устанавливает в ваш интерфейс значение currentDocumentPartTitle.

Кстати, в первой части кода вы показываете создание контроллера вида и задаете значение tempVC.currentDocumentPartTitle, но вы не показываете никакого кода для отображения нового контроллера вида. Представляете ли вы это модально?

+0

Я называю «presentViewController» в конце, но я забыл добавить в вопрос. – Kahsn