2015-04-14 3 views
0

Я начал получать эту ошибку случайным образом (возможно, из-за обновления swift), но когда я достигаю, doSet in detailItem, я вызываю configureView. В configureView я проверяю, действительно ли параметр detailItem установлен, а затем начал назначать значения моим выводам.Weird Ошибка при установке detailItem в DetailViewController от MasterViewController

if let detail: Posting = self.detailItem { 
     print("detail title is ") 
     println(detail.title) 

     // Title 
     self.titleLabel.text = detail.title 

Однако этот сбой с выходом:

detail title is Skiing in Vail 
fatal error: unexpectedly found nil while unwrapping an Optional value 

Ошибка на линии:

self.titleLabel.text = detail.title 

Я не понимаю, почему это происходит сбой, когда он четко установлен. .. Обратите внимание, что этого не происходит, если я вызываю configureView из вида viewDidLoad.

Это происходит только тогда, когда я называю его от

var detailItem: Posting? { 
    didSet { self.configureView() } 
} 

Что-то я не хватает? Это работает асинхронно или что-то в этом роде?

+0

Это звучит очень похоже на ошибку, которую вы получите, если попытаетесь использовать метод prepareForSegue(), а затем установите 'someLabel.text =" "' внутри метода до того, как данный экземпляр будет создан. В вашем случае, вы абсолютно уверены, что экземпляр 'self.titleLabel' создан? В первом примере кода вы можете добавить 'println (self.titleLabel.text)', чтобы узнать, какое значение находится во время выполнения. – kbpontius

+0

Да, 'titleLabel.text' еще не установлен. Итак, как я должен устанавливать параметр detailItem, если не в вызове prepareForSegue в masterVC – mharris7190

ответ

0

Ссылка на ваш комментарий о том, как реализовать это, есть несколько моментов мысли. Во-первых, причина, по которой вы можете изменить его непосредственно из вашего MasterVC, заключается в том, что IBOutlet не был создан в DetailVC и, следовательно, пока недоступен для модификации.

Один из вариантов, который я, вероятно, последую за ним, должен иметь вспомогательную переменную на вашем подробном представлении, где вы можете поместить значение. Затем viewWillAppear() вы можете взять все, что находится в переменной, и установить его как текст метки. Вот учебник по этому вопросу, но чтобы ответить на ваш конкретный quesiton, пожалуйста, перейдите к методу prepareForSegue в этом уроке. Это дает хорошее изложение всего процесса:

http://www.codingexplorer.com/segue-swift-view-controllers/

Позвольте мне знать, если это не поможет решить проблему.

+0

Да, я не упоминал об этом выше, но в итоге я просто использовал 'viewWillAppear' – mharris7190