2016-12-28 2 views
0

Новое в iOS/Swift. Я пытаюсь перенести проект (который просто извлекает содержимое из URL с помощью метода NSData инициализации()) от Swift 2 Свифта 3 и я бегу в пару вопросов:UILabel.text возвращает nil Swift 3

  1. У меня есть prepareForSegue в ViewController. Сам segue отлично работает, однако я не могу вытащить текст из UILabel от контроллера происхождения и отправить его на контроллер назначения. По какой-то причине пункт назначения VC UIlabel по-прежнему показывает значение по умолчанию. Segue код:

    if let identifier = segue.identifier{ 
          if identifier == "showUserDetailSegue"{ 
           if let detailsViewController = segue.destination as? DetailsViewController, 
            let cell = sender as? UserInfoTableViewCell, 
            let text = cell.textLabel?.text{ 
            detailsViewController.text = text 
            } 
           } 
         } 
    

detailsViewController.text является публичной вар, который использует didSet свойство.

DestinationVC код:

var text: String?{ 
     didSet{ 
      updateUI() 
     } 
    } 


private func updateUI(){ 
     self.detailsTextView.text = text 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBOutlet weak var detailsTextView: UILabel! 

2.One моего GET запроса URL имеет некоторые пробелы между ними. Например, если мы возьмем пример URL-адреса, такой как: http://www.omdbapi.com/?t=Game%20of%20Thrones&Season=1, асинхронный вызов для этого продолжает терпеть неудачу с недопустимым URL-адресом. Должны ли мы использовать какую-то кодировку?

Любые советы, подсказки очень ценятся.

Спасибо.

+0

Есть ли у вас код для изменения текста этикетки? – luk2302

+0

Да, я должен обновить вопрос с помощью destinationVC – user2511882

+0

Добавить отладочные операторы, это внутренний комплекс 'if let' даже достиг? – luk2302

ответ

2

Является ли ваш UILabel в DetailsViewController необработанным дополнительным? Скорее всего, в этот момент все еще nil. Самый ранний момент вы должны настроить свои представления в viewDidLoad.

Просто удалите didSet обработчик и установить текст UILabel «s к self.text в viewDidLoad.

+0

попробовал это уже .. ничего не добавил .. я добавил код для destinationVC – user2511882

+0

Вы убедились, что строка 'detailsViewController.text = text' фактически выполнена? Возможно, одно из определений в выражениях 'if let' оценивается как nil. – crizzis

+0

Похоже, последнее, если оператор let не возвращает текст. Не знаю, почему ... так как я вижу список на экране – user2511882