2017-02-01 8 views
-1

コントローラ「CKレコード」を保持するコントローラ「詳細」。コントローラー1の1つのボタンは、別のコントローラーに接続します。私はそのロジックのために以下のセグを設定しています...セグの変数からUI要素が表示されない

@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では、以下の受信変数とラベルがこれらの新しい変数に設定されています。

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 
} 

しかし、このコードを実行すると、コントローラ2にラベル(正しく接続されている)が表示されないという問題があります。写真のように。

Missing Labels

私が間違ってここで何を取得していますか?

+0

Up-voted @ Nirav-Dの回答です。あたりです。 FIRST - あなたは**決して**関数内の関数を終了してはいけません(あなたのように)。 2番目の(そしてあまり強調されていない)今日では、SwiftはNSDictionaryの特別な理由がない限りDictionaryを使用します。 – dfd

答えて

0

書き込み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) 
} 

をコードを見つけてくださいまた、これらの値がnilであるか

let lastreservation = detail.value(forKey: "Reservation") as? String 
let lasttake = detail.value(forKey: "Take") as? String 
かどうかを確認してください
+0

両方の値が非ゼロです。 – Jon

+0

予約、受け入れの値はどうですか?FoodDetail01 –

+0

文字列 - 予想される応答が「はい」または「いいえ」です。これらの値はCloudKitダッシュボードに記入されています。 – Jon

1

あなたの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 
     } 
     ... 
    } 
} 

注:スウィフトでは、それはあなたがsubscriptの代わりNSDictionaryでネイティブDictionaryを使用する場合は打者です。

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! 
    }... 
関連する問題