2016-07-28 5 views
0

Я пытаюсь получить некоторую информацию, чтобы перейти к другому контроллеру представления. Я сделал сегу, и ничего не видно. Я использую внешний класс для организации информации. Но я не уверен, почему он не работает.Свифт, переданная информация не отображается

первый контроллер вид:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toLocationVC" { 

     let lVC = segue.destinationViewController as! LocationViewController 

     lVC.locationImage?.image = locations[locationSelection].image; 
     lVC.nameLabel?.text = locations[locationSelection].name; 
     lVC.descriptionTextView?.text = locations[locationSelection].desc; 

    } 

второй вид:

var selectedLocation : Location?; 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 

    locationImage.image = selectedLocation!.image 
    nameLabel.text = selectedLocation!.name 
    descriptionTextView.text = selectedLocation!.desc 

} 

и это класс Расположение:

class Location { 

var image : UIImage 
var name : String 
private var description : String 

var desc : String { 
    return description + "\n\n\nThis Description and Images Provided by http://www.travel.usnews.com" 
} 

init(name : String, image : UIImage, description: String) { 
    self.name = name; 
    self.image = image; 
    self.description = description; 
    } 
} 

Я попытался изменить некоторые из кода вокруг, но ничего не работает.

+0

Почему вы помещаете код внутри 'didReceiveMemoryWarning'? – Christian

+0

oh my bad, я написал это неправильно здесь .. его внутри viewdidload – art3mis

+0

он не работает .. кажется, информация с первого взгляда не была пройдена – art3mis

ответ

0

Очевидно, что вы переопределяете информацию, которую вы только что установили prepareForSegue(), в вашем втором методе контроллера viewDidLoad().

Просто удалите следующий код из viewDidLoad() и оно должно работать (если это на самом деле правильный переход и все данные устанавливаются):

locationImage.image = selectedLocation!.image 
nameLabel.text = selectedLocation!.name 
descriptionTextView.text = selectedLocation!.desc 

(И я получил ощущение, что selectedLocation является nil (= не установлен) в viewDidLoad())

+0

мой выбранный сайт говорит nil – art3mis

+0

Итак, вы удалили 3 строки из вы 'viewDidLoad()'? – Mischa

+0

я сделал, но все еще не работает – art3mis

0

Я бы переписать SEGUE следующим образом:.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "toLocationVC" { 
     if let lVC = segue.destinationViewController as? LocationViewController { 
      lVC.selectedLocation = locations[locationSelection] 
     } 
    } 

Затем установите точка останова внутри блока if let lVC = segue...{, чтобы убедиться, что он когда-либо выполнен. Пройдите код и используйте команду po {variable name here} в отладчике, чтобы просмотреть каждую переменную.

Вы не должны ничего устанавливать в функции viewDidLoad() больше, чем предлагалось Mischa. Поэтому удалите эти назначения.

Если этот ответ не поможет, я думаю, вам нужно будет обновить свои списки кодов, чтобы включить дополнительную информацию. Мы не можем точно определить, где много этих переменных объявлено, или если второе представление является правильным классом.

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