2017-02-01 22 views
-1

Контроллер Один, который содержит CK Record, «Detail». Одна кнопка в контроллере One переходит к другому контроллеру. У меня есть следующий SEGUE набор для этой логики ...Элементы пользовательского интерфейса, не появляющиеся с переменными, поступающими от 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. Это верно. FIRST - вы должны ** никогда не заканчивать функцию внутри функции (например, у вас есть). Второй (и менее подчеркнутый). В настоящее время Swift использует словарь, если нет конкретной причины для NSDictionary. – dfd

ответ

0

Написать prepareForSegue как separatefunction и вызвать 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 
+0

Оба значения не равны нулю. – Jon

+0

Как насчет резервирования значений, взять в контроллер FoodDetail01 –

+0

Строки - Либо «Да», либо «Нет» - ожидаемые ответы. Эти значения были заполнены в панели CloudKit. – Jon

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.

0

Обновите свой код для передачи строкового значения в segue. Добавить! после последнего сохранения и достижения. Если вы не добавляете, то он передает значение nil. вы можете проверить, добавив точку останова.

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

 Смежные вопросы

  • Нет связанных вопросов^_^