보기간에 데이터를 전달하기 위해 필자는 내보기의 데이터 모델 역할을하는 "임시"개체를 사용하기로 결정했습니다.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
무엇이 누락 되었습니까? 당신의 도움을 주셔서 감사합니다.