控制器一,持有CK记录,"细节"。 Controller One中的一个按钮会切换到另一个Controller。我为该逻辑设置了以下segue ...
@IBAction func booton(_ sender: Any) {
func prepareForSegue(segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "lastsegue"
{
if let destination = segue.destination as? FoodDetail01
{
let lastreservation = detail.value(forKey: "Reservation") as? String
let lasttake = detail.value(forKey: "Take") as? String
destination.reservation = lastreservation
destination.take = lasttake
}...
在Controller Two中,我有以下接收变量和设置为这些新变量的标签。
import UIKit
class FoodDetail01: UIViewController {
var reservation: String!
var take: String!
@IBOutlet weak var reservationlabel: UILabel!
@IBOutlet weak var takelabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.reservationlabel.text = reservation
self.takelabel.text = take
}
然而,这导致我的问题,当我运行此代码时,控制器二中没有出现任何标签(正确连接)。如图所示。
我在这里弄错了什么?
答案 0 :(得分:1)
您已在prepareForSegue
操作中添加了booton
,但应该使用其他类级方法。
@IBAction func booton(_ sender: Any) {
//Button action code
}
//prepareForSegue is outside from that method like other method of class
override func prepareForSegue(segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "lastsegue"
{
if let destination = segue.destination as? FoodDetail01 {
let lastreservation = detail.value(forKey: "Reservation") as? String
let lasttake = detail.value(forKey: "Take") as? String
destination.reservation = lastreservation
destination.take = lasttake
}
...
}
}
注意:在Swift中,如果您使用Dictionary
而不是subscript
而使用原始NSDictionary
,则会更糟糕。
答案 1 :(得分:0)
请更新您在segue中传递字符串值的代码。 加!经过最后的保存和持续。如果你没有添加它,它传递零值。你可以通过添加断点进行检查。
@IBAction func booton(_ sender: Any) {
func prepareForSegue(segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "lastsegue"
{
if let destination = segue.destination as? FoodDetail01
{
let lastreservation = detail.value(forKey: "Reservation") as? String
let lasttake = detail.value(forKey: "Take") as? String
destination.reservation = lastreservation!
destination.take = lasttake!
}...
答案 2 :(得分:0)
将prepareForSegue写为单独的函数并调用performSegue来调用segue
请在SWIFT 3中找到代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "lastsegue"
{
if let destination = segue.destination as? FoodDetail01
{
let lastreservation = detail.value(forKey: "Reservation") as? String
let lasttake = detail.value(forKey: "Take") as? String
destination.reservation = lastreservation
destination.take = lasttake
}
}
}
@IBAction func booton(_ sender: Any) {
self.performSegue(withIdentifier: "lastsegue", sender: self)
}
请检查这些值是否为零
let lastreservation = detail.value(forKey: "Reservation") as? String
let lasttake = detail.value(forKey: "Take") as? String