我正在尝试将一些信息传递给另一个视图控制器。我做了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;
}
}
我尝试过更改一些代码,但似乎没有任何效果。
答案 0 :(得分:0)
显然,您在第二个视图控制器的prepareForSegue()
方法中覆盖了刚刚设置的信息viewDidLoad()
。
只需从viewDidLoad()
中删除以下代码,它就应该正常工作(如果这实际上是正确的segue且所有数据都已设置):
locationImage.image = selectedLocation!.image
nameLabel.text = selectedLocation!.name
descriptionTextView.text = selectedLocation!.desc
(我感觉selectedLocation
中的nil
为viewDidLoad()
(=未设置)。)
答案 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建议中设置任何内容。所以删除那些作业。
如果此答案无效,我认为您需要更新代码清单以包含更多信息。我们无法确切地看到声明了很多这些变量的位置,或者第二个视图是否是正确的类。