用户界面元素没有出现变量来自赛格

问题描述:

控制器一个持有CK记录,“细节”。控制器1中的一个按钮会跳到另一个控制器。我有以下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 
     }... 

在控制器配备了两个,我有以下的接收变量和标签设置为这些新的变量。

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 
} 

但是,这是导致我的问题,当我运行此代码时,没有标签(正确连接)出现在控制器二。如图所示。

Missing Labels

什么我收到错在这里?

+0

增加@ Nirav-D答案。这是正确的。第一 - 你应该**从不**结束函数中的函数(就像你有)。其次(不太重要)现在,Swift使用Dictionary,除非有特定的NSDictionary原因。 – dfd

写prepareForSegue作为separatefunction并呼吁performSegue调用赛格瑞

请查阅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 
+0

这两个值都是非零。 – Jon

+0

价值保留怎么样,在控制器中采取FoodDetail01 –

+0

字符串 - “是”或“否”是预期的响应。这些值已填写在CloudKit仪表板中。 – Jon

您在booton动作中添加了prepareForSegue,但它应该与您的其他课程级别方法一起使用。

@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 
     } 
     ... 
    } 
} 

注:在斯威夫特是连击,如果你使用本地Dictionarysubscript而不是NSDictionary

请更新您的代码,以便在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! 
    }...