В моем приложении у меня есть mainViewController
с некоторым контентом на нем. В некоторых случаях я загружаю контроллер просмотра наложения из раскадровки. Контроллер просмотра наложения меньше экрана и отображается поверх основного монитора. Я инициализировать его следующим образом:Короткое отставание при настройке текста меток с помощью раскадровки
class MyOverlayViewController {
@IBOutlet var textLabel: UILabel!
@IBOutlet var countLabel: UILabel!
static let storyboard = UIStoryboard(name: "...", bundle: nil)
// Return a new view controller
class func newViewControllerWithData(data: AnyObject) -> UIViewController {
let vc = storyboard.instantiateViewControllerWithIdentifier("MyOverlayViewController") as! MyOverlayViewController
Timing.performAfterDelay(0) {
vc.titleLabel.text = data[...] // Load title label text
vc.countLabel.text = data[...] // Load count label text
}
return vc
}
}
Я не могу установить текст этикетки непосредственно в методе newViewControllerWithData
, потому что производит следующее сообщение об ошибке: fatal error: unexpectedly found nil while unwrapping an Optional value.
Так этикетки nil
при доступе к ним сразу же в этом методе.
Кажется, что две выходы с меткой не загружены сразу, когда контроллер представления создается из раскадровки, потому что для этого требуется (очень) короткое время.
Поэтому я использую свой метод Timing.performAfterDelay(0)
, который выполняет код после следующего цикла цикла цикла (он запускает таймер с длительностью 0
и выполняет код как обратный вызов). Код (я проверил это), выполненный в основном потоке.
Проблема заключается в следующем:
Иногда (не всегда, и не воспроизводимый!), При загрузке контроллера вида наложения, на долю секунды метка является пустого (как я определил их в раскадровке), прежде чем они покажут текст. Таким образом, пользователь видит пустые метки в течение короткого момента, прежде чем фактические данные будут загружены в метки.
Как я могу исправить это поведение?
Возможно ли каким-либо образом получить доступ к розеткам сразу после создания экземпляра контроллера вида из раскадровки, не используя Timing.performAfterDelay(0)
?
Справка будет принята с благодарностью.
Хорошо, спасибо, это решает проблему! –
, пожалуйста, отметьте ответ, принятый :) – ishaq
Через 15 минут. –