为了在视图之间传递数据,我决定使用一个“临时”对象作为我的视图的数据模型。
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
在nil
方法中返回shouldPerformSegueWithIdentifier
,但未在nil
方法中返回unwindToViewController
。
我认为我的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 :(得分:0)
好的,我修好了。发生的事情是我实现了一些代码来重置dataSource,如果用户决定点击导航栏中的后退按钮,则tempMedecine
:
if self.isMovingToParentViewController() {
tempMedecine?.dosageQuantity = nil
tempMedecine?.dosageQuantityType = nil
}
问题是,我从未想过问题可能来自于此,因为我可以使用tempMedecine
数据在展开索引viewController后设置我的tableView中的值但是当对象通过时我完全错过了该部分我的参考。