2017-02-01 10 views
-1

CK 레코드 "Detail"이있는 컨트롤러 하나. 컨트롤러 하나의 버튼 하나가 다른 컨트롤러와 연결됩니다. 그 논리에 대해 설정 한 다음 SEGUE ... 컨트롤러 두 segue에서 오는 변수가 표시되지 않는 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 
     }... 

이, 나는이 새로운 변수에 다음 수신 변수와 레이블을 설정 있습니다.

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 - 당신은 ** 결코 ** 함수 내에서 함수를 끝내면 안됩니다. 두 번째 (덜 강조된) 요즘 Swift는 NSDictionary에 대한 특별한 이유가 없으면 사전을 사용합니다. – dfd

답변

0

separatefunction로 쓰기 prepareForSegue 및 performSegue이 SEGUE를 호출 전화

또한

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) 
} 

3

let lastreservation = detail.value(forKey: "Reservation") as? String 
let lasttake = detail.value(forKey: "Take") as? String 
이 값이 전무 여부를 확인 여부를하시기 바랍니다 SWIFT의 코드를 찾아주세요
+0

두 값 모두 nil이 아닙니다. – 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에 문자열 값을 전달하는 코드를 업데이트하십시오. 추가! 마지막 보전과 마지막 때. 당신이 그것을 추가하지 않으면 그것은 그것 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! 
    }...