传递的Swift,segue信息不会显示

时间:2016-07-28 22:50:40

标签: swift xcode class segue

我正在尝试将一些信息传递给另一个视图控制器。我做了segue并没有显示任何东西。我正在使用外部类来组织信息。但我不确定为什么它不起作用。

第一个视图控制器:

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;
   }
}

我尝试过更改一些代码,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:0)

显然,您在第二个视图控制器的prepareForSegue()方法中覆盖了刚刚设置的信息viewDidLoad()

只需从viewDidLoad()中删除以下代码,它就应该正常工作(如果这实际上是正确的segue且所有数据都已设置):

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

(我感觉selectedLocation中的nilviewDidLoad()(=未设置)。)

答案 1 :(得分: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建议中设置任何内容。所以删除那些作业。

如果此答案无效,我认为您需要更新代码清单以包含更多信息。我们无法确切地看到声明了很多这些变量的位置,或者第二个视图是否是正确的类。