2016-09-01 3 views
1

보기간에 데이터를 전달하기 위해 필자는 내보기의 데이터 모델 역할을하는 "임시"개체를 사용하기로 결정했습니다.Swift 속성 nil outside unwindToViewController

var tempMedecine = TempMedecine() 
var xValue = 0 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let dmController = segue.destinationViewController as? JRBDosageMainTableViewController { 
    dmController.tempMedecine = self.tempMedecine 
    } 
} 

@IBAction func unwindToViewController(segue: UIStoryboardSegue) { 
    if let dosageController = segue.sourceViewController as? JRBDosageMainTableViewController { 
    self.tempMedecine = dosageController.tempMedecine! 
    self.xValue = 10 
    let dosageCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 1, inSection: 0)) 
    dosageCell?.detailTextLabel?.text = String(self.tempMedecine.dosageQuantity!) + " " + self.tempMedecine.dosageQuantityType! 
    } 
} 

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool { 
    if identifier == "saveMedecine" { 
    print(xValue) 
    guard tempMedecine.name != nil else { 
     Common.genericAlertController(self, title: "Error", message: "You need to define a name", preferedStyle: .Alert) 
     return false 
    } 
    guard self.tempMedecine.dosageQuantityType != nil else { 
     Common.genericAlertController(self, title: "Error", message: "You need to set a quantity", preferedStyle: .Alert) 
     return false 
    } 

    } 
    else { 
     return true 
    } 
    return false 
} 

이것은 유효성 검사를 수행 할 필요가있는 "index"viewController의 코드 중 일부입니다.

모든 viewControllers에서 볼 수 있듯이 tempMedecine이라는 속성이 있습니다. 필요한 경우 데이터를 전달하고 데이터를 업데이트합니다.

문제는 self.tempMedecine.dosageQuantityType 반환 shouldPerformSegueWithIdentifier 방법 nil을하지만,이 unwindToViewController 방법 nil 반환되지 않는 것입니다.

TempMedecine 개체의 인스턴스가 두 개있을 수 있다고 생각했지만 사실이 아닙니다. 또한 내 viewControllers 사이에 tempMedecine 변수를 전달하는 방법에 문제가있을 수 있지만 tempMedecine.name 속성은 효과적으로 전달되지만이 속성은 유효성 검사를 구현하려는 동일한 viewController에서 설정된다는 점만 다릅니다.

func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     self.tempMedecine.name = textField.text 
     return true 
} 

두 가지 다른 범위로 작업하고있는 것처럼 보입니다. unwindToViewController 메소드를 종료하는 즉시 tempMedecine 변수가 업데이트되지 않은 다른 스코프로 되돌아갑니다.

하지만 이상한 부분은 xValue과 같은 간단한 변수를 사용하는 경우입니다. unwindToViewController 방법의 값을 업데이트하면 올바른 값을 얻을 수 있습니다. shouldPerformSegueWithIdentifier

무엇이 누락 되었습니까? 당신의 도움을 주셔서 감사합니다.

답변

0

좋습니다. 나는이 문제는이에서 올 수 있다고 생각하지

if self.isMovingToParentViewController() { 
    tempMedecine?.dosageQuantity = nil 
    tempMedecine?.dosageQuantityType = nil 
} 

것은이 : 무슨 일이 것은 사용자가 탐색 모음에서 뒤로 버튼을 클릭하기로 결심했다면 나는 tempMedecine을 수있는 데이터 소스를 재설정 할 몇 가지 코드를 구현이었다 나는 인덱스 viewController를 풀어 준 후 내 tableView의 값을 설정하기 위해 tempMedecine 데이터를 사용할 수 있지만 객체가 참조로 전달 될 때 나는 그 부분을 완전히 놓쳤습니다.