2015-01-19 3 views
0

Я пытаюсь изменить текст на этикетке, когда приложение будет входить передний план, но я всегда получаюapplicationWillEnterForeground получает найдено ноль для TextLabel

фатальной ошибки: неожиданно нашел ноль в то время как разворачивание необязательного значения

ViewController.swift 

    @IBOutlet var textLabel: UILabel! 

    func showLabel() { 
     textLabel.text = "Welcome back" 
    } 

и

AppDelegate.swift 

func applicationWillEnterForeground(application: UIApplication) { 
     ViewController().showLabel() 
    } 

Любая идея, как ее исправить?

+0

ли, что контролеры вид Развернутый вид был загружен? – Wain

+0

Возможный дубликат [Nil при развертывании необязательного значения в файле didBecomeActive()] (http://stackoverflow.com/questions/28016699/nil-when-unwrapping-an-optional-value-in-didbecomeactive) –

+0

yep Это был мой Решение: http://stackoverflow.com/questions/28016699/nil-when-unwrapping-an-optional-value-in-didbecomeactive, но я не мог найти его раньше. Сегодня было задано вопрос – chrisco

ответ

1

Как я уже говорил в предыдущем post, вы должны инициализировать свою метку в функции viewDidLoad вашего контроллера вида.

В самом деле, в то время вы находитесь в applicationWillEnterForeground, ваш контроллер представления еще не инициализирована, поэтому метка TextLabel равна нулю (nil), и вы пытаетесь получить доступ к свойству нулевого объекта (причина вашей ошибки).

ViewController.swift:

@IBOutlet var textLabel: UILabel! 

func viewDidLoad() { 
    textLabel.text = "Welcome back" 
} 
+0

не работает. Я сделал это seceond после того, как увидел ошибку, но это не помогло. – chrisco

1

вопрос, вы создаете новый экземпляр вашего ViewController и пытается установить в него данные.

Вместо того, чтобы использовать существующий (Вы создали на didFinishLaunchingWithOptions:)

+0

Я знаю это, но как я могу получить доступ к существующей? func application (application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Переопределить точку для настройки после запуска приложения. return true } – chrisco

+0

@chrisco: Если вы устанавливаете ViewController из раскадровки, попробуйте механизм возврата (средства из управления представлением извлекают данные из делегата приложения). Else задайте свой ViewController как свойство rootViewController вашего приложения –

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