簡體   English   中英

swift屬性nil在unwindToViewController之外

[英]Swift property 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返回nilshouldPerformSegueWithIdentifier方法,但沒有返回nilunwindToViewController方法。

我想我的TempMedecine對象可能有兩個實例,但事實並非如此。 我還認為我在tempMedecine之間傳遞tempMedecine變量的方式可能有問題,但屬性tempMedecine.name被有效傳輸,唯一的區別是這個屬性設置在我要實現驗證的同一個viewController中:

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

看起來我正在使用兩個不同的范圍。 一旦我離開unwindToViewController方法,我就會回到另一個未更新tempMedecine變量的范圍。

但奇怪的是當我使用像xValue這樣的簡單變量時。 如果我在unwindToViewController方法中更新它的值,我在shouldPerformSegueWithIdentifier得到正確的值

我錯過了什么? 謝謝你的幫助。

好的,我修好了。 發生了什么事情我實現了一些代碼來重置dataSource,如果用戶決定點擊導航欄中的Back Button,那就是tempMedecine

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

問題是,我從未想過這個問題可能來自於此,因為我可以使用tempMedecine數據在展開索引viewController后設置我的tableView中的值,但是當對象通過我的引用時我完全錯過了該部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM