swift属性nil在unwindToViewController之外

时间:2016-09-01 11:23:45

标签: ios swift

为了在视图之间传递数据,我决定使用一个“临时”对象作为我的视图的数据模型。

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.dosageQuantityTypenil方法中返回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

中获得正确的值

我错过了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我修好了。发生的事情是我实现了一些代码来重置dataSource,如果用户决定点击导航栏中的后退按钮,则tempMedecine

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

问题是,我从未想过问题可能来自于此,因为我可以使用tempMedecine数据在展开索引viewController后设置我的tableView中的值但是当对象通过时我完全错过了该部分我的参考。